Current Path : /home/usr.opt/mysql57/mysql-test/suite/parts/r/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //home/usr.opt/mysql57/mysql-test/suite/parts/r/partition_alter4_myisam.result |
SET @max_row = 20; SET @@session.default_storage_engine = 'MyISAM'; #------------------------------------------------------------------------ # 0. Setting of auxiliary variables + Creation of an auxiliary tables # needed in many testcases #------------------------------------------------------------------------ SELECT @max_row DIV 2 INTO @max_row_div2; SELECT @max_row DIV 3 INTO @max_row_div3; SELECT @max_row DIV 4 INTO @max_row_div4; SET @max_int_4 = 2147483647; DROP TABLE IF EXISTS t0_template; CREATE TABLE t0_template ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) , PRIMARY KEY(f_int1)) ENGINE = MEMORY; # Logging of <max_row> INSERTs into t0_template suppressed DROP TABLE IF EXISTS t0_definition; CREATE TABLE t0_definition ( state CHAR(3), create_command VARBINARY(5000), file_list VARBINARY(10000), PRIMARY KEY (state) ) ENGINE = MEMORY; DROP TABLE IF EXISTS t0_aux; CREATE TABLE t0_aux ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) ENGINE = MEMORY; SET AUTOCOMMIT= 1; SET @@session.sql_mode= ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. # End of basic preparations needed for all tests #----------------------------------------------- #======================================================================== # 1.1.1.12 ALTER TABLE <maintenance> PARTITION #======================================================================== #------------------------------------------------------------------------ # 1 ALTER ... ANALYZE PARTITION #------------------------------------------------------------------------ # 1.1 ALTER ... ANALYZE PARTITION part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 1.2 ALTER ... ANALYZE PARTITION part_1,part_2; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 1.3 ALTER ... ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 1.4 ALTER ... ANALYZE PARTITION part_1,part_1,part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 analyze Error Error in list of partitions to test.t1 test.t1 analyze status Operation failed test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 1.5 ALTER ... ANALYZE PARTITION ALL; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 ANALYZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; #------------------------------------------------------------------------ # 2 ALTER ... CHECK PARTITION #------------------------------------------------------------------------ # 2.1 ALTER ... CHECK PARTITION part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 2.2 ALTER ... CHECK PARTITION part_1,part_2; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 2.3 ALTER ... CHECK PARTITION part_1,part_2,part_5,part_6,part_10; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 2.4 ALTER ... CHECK PARTITION part_1,part_1,part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 check Error Error in list of partitions to test.t1 test.t1 check status Operation failed test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 2.5 ALTER ... CHECK PARTITION ALL; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 CHECK PARTITION ALL; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; #------------------------------------------------------------------------ # 3 ALTER ... OPTIMIZE PARTITION #------------------------------------------------------------------------ # 3.1 ALTER ... OPTIMIZE PARTITION part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 3.2 ALTER ... OPTIMIZE PARTITION part_1,part_2; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 3.3 ALTER ... OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 3.4 ALTER ... OPTIMIZE PARTITION part_1,part_1,part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 optimize Error Error in list of partitions to test.t1 test.t1 optimize status Operation failed test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 3.5 ALTER ... OPTIMIZE PARTITION ALL; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 OPTIMIZE PARTITION ALL; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; #------------------------------------------------------------------------ # 4 ALTER ... REBUILD PARTITION #------------------------------------------------------------------------ # 4.1 ALTER ... REBUILD PARTITION part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 4.2 ALTER ... REBUILD PARTITION part_1,part_2; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 4.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; # 4.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; ERROR HY000: Error in list of partitions to REBUILD DROP TABLE t1; # 4.5 ALTER ... REBUILD PARTITION ALL; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REBUILD PARTITION ALL; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; #------------------------------------------------------------------------ # 5 ALTER ... REPAIR PARTITION #------------------------------------------------------------------------ # 5.1 ALTER ... REPAIR PARTITION part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 5.2 ALTER ... REPAIR PARTITION part_1,part_2; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 5.3 ALTER ... REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 5.4 ALTER ... REPAIR PARTITION part_1,part_1,part_1; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; Table Op Msg_type Msg_text test.t1 repair Error Error in list of partitions to test.t1 test.t1 repair status Operation failed test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; # 5.5 ALTER ... REPAIR PARTITION ALL; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = MyISAM, PARTITION part_2 ENGINE = MyISAM, PARTITION part_3 ENGINE = MyISAM, PARTITION part_4 ENGINE = MyISAM, PARTITION part_5 ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) ENGINE = MyISAM, PARTITION part0 VALUES IN (0) ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) ENGINE = MyISAM, PARTITION part3 VALUES IN (3) ENGINE = MyISAM) */ unified filelist t1#P#part0.MYD t1#P#part0.MYI t1#P#part1.MYD t1#P#part1.MYI t1#P#part2.MYD t1#P#part2.MYI t1#P#part3.MYD t1#P#part3.MYI t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_N.MYD t1#P#part_N.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_1 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1.MYD t1#P#part_1.MYI t1#P#part_2.MYD t1#P#part_2.MYI t1#P#part_3.MYD t1#P#part_3.MYI t1#P#part_4.MYD t1#P#part_4.MYI t1#P#part_5.MYD t1#P#part_5.MYI t1#P#parta.MYD t1#P#parta.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0) ENGINE = MyISAM, PARTITION part_2 VALUES LESS THAN (5) ENGINE = MyISAM, PARTITION part_3 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_4#SP#part_4sp0.MYD t1#P#part_4#SP#part_4sp0.MYI t1#P#part_4#SP#part_4sp1.MYD t1#P#part_4#SP#part_4sp1.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#subpart11.MYD t1#P#part_1#SP#subpart11.MYI t1#P#part_1#SP#subpart12.MYD t1#P#part_1#SP#subpart12.MYI t1#P#part_2#SP#subpart21.MYD t1#P#part_2#SP#subpart21.MYI t1#P#part_2#SP#subpart22.MYD t1#P#part_2#SP#subpart22.MYI t1#P#part_3#SP#subpart31.MYD t1#P#part_3#SP#subpart31.MYI t1#P#part_3#SP#subpart32.MYD t1#P#part_3#SP#subpart32.MYI t1#P#part_4#SP#subpart41.MYD t1#P#part_4#SP#subpart41.MYI t1#P#part_4#SP#subpart42.MYD t1#P#part_4#SP#subpart42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; ERROR HY000: Table has no partition for value 2147483647 DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11 ENGINE = MyISAM, SUBPARTITION sp12 ENGINE = MyISAM), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = MyISAM, SUBPARTITION sp22 ENGINE = MyISAM), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = MyISAM, SUBPARTITION sp32 ENGINE = MyISAM), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = MyISAM, SUBPARTITION sp42 ENGINE = MyISAM)) */ unified filelist t1#P#part_1#SP#sp11.MYD t1#P#part_1#SP#sp11.MYI t1#P#part_1#SP#sp12.MYD t1#P#part_1#SP#sp12.MYI t1#P#part_2#SP#sp21.MYD t1#P#part_2#SP#sp21.MYI t1#P#part_2#SP#sp22.MYD t1#P#part_2#SP#sp22.MYI t1#P#part_3#SP#sp31.MYD t1#P#part_3#SP#sp31.MYI t1#P#part_3#SP#sp32.MYD t1#P#part_3#SP#sp32.MYI t1#P#part_4#SP#sp41.MYD t1#P#part_4#SP#sp41.MYI t1#P#part_4#SP#sp42.MYD t1#P#part_4#SP#sp42.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REPAIR PARTITION ALL; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0) ENGINE = MyISAM, PARTITION part_2 VALUES IN (1) ENGINE = MyISAM, PARTITION part_3 VALUES IN (NULL) ENGINE = MyISAM) */ unified filelist t1#P#part_1#SP#part_1sp0.MYD t1#P#part_1#SP#part_1sp0.MYI t1#P#part_1#SP#part_1sp1.MYD t1#P#part_1#SP#part_1sp1.MYI t1#P#part_1#SP#part_1sp2.MYD t1#P#part_1#SP#part_1sp2.MYI t1#P#part_2#SP#part_2sp0.MYD t1#P#part_2#SP#part_2sp0.MYI t1#P#part_2#SP#part_2sp1.MYD t1#P#part_2#SP#part_2sp1.MYI t1#P#part_2#SP#part_2sp2.MYD t1#P#part_2#SP#part_2sp2.MYI t1#P#part_3#SP#part_3sp0.MYD t1#P#part_3#SP#part_3sp0.MYI t1#P#part_3#SP#part_3sp1.MYD t1#P#part_3#SP#part_3sp1.MYI t1#P#part_3#SP#part_3sp2.MYD t1#P#part_3#SP#part_3sp2.MYI t1.frm t1.par # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK test.t1 analyze warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK test.t1 check warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK test.t1 optimize warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK test.t1 repair warning The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check layout success: 1 TRUNCATE t1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; #------------------------------------------------------------------------ # 6 ALTER ... REMOVE PARTITIONING #------------------------------------------------------------------------ # 6.1 ALTER ... REMOVE PARTITIONING; DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part_N VALUES IN (NULL), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) (PARTITION parta VALUES LESS THAN (0), PARTITION part_1 VALUES LESS THAN (5), PARTITION part_2 VALUES LESS THAN (10), PARTITION part_3 VALUES LESS THAN (10 + 5), PARTITION part_4 VALUES LESS THAN (20), PARTITION part_5 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 (PARTITION part_1 VALUES LESS THAN (0), PARTITION part_2 VALUES LESS THAN (5), PARTITION part_3 VALUES LESS THAN (10), PARTITION part_4 VALUES LESS THAN (2147483646)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11, SUBPARTITION subpart12), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21, SUBPARTITION subpart22), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31, SUBPARTITION subpart32), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41, SUBPARTITION subpart42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part_1 VALUES IN (0) (SUBPARTITION sp11, SUBPARTITION sp12), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21, SUBPARTITION sp22), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41, SUBPARTITION sp42)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(20), f_char2 CHAR(20), f_charbig VARCHAR(1000) ) PARTITION BY LIST(ABS(MOD(f_int1,2))) SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 (PARTITION part_1 VALUES IN (0), PARTITION part_2 VALUES IN (1), PARTITION part_3 VALUES IN (NULL)); Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; # Start usability test (inc/partition_check.inc) create_command SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 unified filelist t1.MYD t1.MYI t1.frm # check prerequisites-1 success: 1 # check COUNT(*) success: 1 # check MIN/MAX(f_int1) success: 1 # check MIN/MAX(f_int2) success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'delete me' FROM t0_template WHERE f_int1 IN (2,3); # check prerequisites-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'delete me'; # INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE # check read via f_int1 success: 1 # check read via f_int2 success: 1 # check multiple-1 success: 1 DELETE FROM t1 WHERE MOD(f_int1,3) = 0; # check multiple-2 success: 1 INSERT INTO t1 SELECT * FROM t0_template WHERE MOD(f_int1,3) = 0; # check multiple-3 success: 1 UPDATE t1 SET f_int1 = f_int1 + @max_row WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 AND @max_row_div2 + @max_row_div4; # check multiple-4 success: 1 DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row AND @max_row_div2 + @max_row_div4 + @max_row; # check multiple-5 success: 1 SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-1 success: 1 SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; INSERT INTO t1 SET f_int1 = @cur_value , f_int2 = @cur_value, f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR), f_charbig = '#SINGLE#'; # check single-2 success: 1 SELECT MIN(f_int1) INTO @cur_value1 FROM t1; SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value2 WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; # check single-3 success: 1 SET @cur_value1= -1; SELECT MAX(f_int1) INTO @cur_value2 FROM t1; UPDATE t1 SET f_int1 = @cur_value1 WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; # check single-4 success: 1 SELECT MAX(f_int1) INTO @cur_value FROM t1; DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; # check single-5 success: 1 DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; # check single-6 success: 1 INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; # check single-7 success: 1 DELETE FROM t1 WHERE f_charbig = '#2147483647##'; DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; INSERT t1 SET f_int1 = 0 , f_int2 = 0, f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), f_charbig = '#NULL#'; INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR), f_charbig = '#NULL#'; # check null success: 1 # check null-1 success: 1 UPDATE t1 SET f_int1 = -@max_row WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-2 success: 1 UPDATE t1 SET f_int1 = NULL WHERE f_int1 = -@max_row AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-3 success: 1 DELETE FROM t1 WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR) AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#'; # check null-4 success: 1 DELETE FROM t1 WHERE f_int1 = 0 AND f_int2 = 0 AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) AND f_charbig = '#NULL#'; SET AUTOCOMMIT= 0; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-1 success: 1 COMMIT WORK; # check transactions-2 success: 1 ROLLBACK WORK; # check transactions-3 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; ROLLBACK WORK; # check transactions-4 success: 1 INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, '', '', 'was inserted' FROM t0_template source_tab WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; # check transactions-5 success: 1 ROLLBACK WORK; Warnings: Warning 1196 Some non-transactional changed tables couldn't be rolled back # check transactions-6 success: 1 # INFO: Storage engine used for t1 seems to be not transactional. COMMIT; # check transactions-7 success: 1 DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; SET @@session.sql_mode = 'traditional'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, '', '', 'was inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; ERROR 22012: Division by 0 COMMIT; # check transactions-8 success: 1 # INFO: Storage engine used for t1 seems to be unable to revert # changes made by the failing statement. SET @@session.sql_mode = ''; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET AUTOCOMMIT= 1; DELETE FROM t1 WHERE f_charbig = 'was inserted'; COMMIT WORK; UPDATE t1 SET f_charbig = REPEAT('b', 1000); # check special-1 success: 1 UPDATE t1 SET f_charbig = ''; # check special-2 success: 1 UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-1 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; # check trigger-2 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-3 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-4 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = new.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-5 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2 WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-6 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-7 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW BEGIN UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, f_charbig = 'updated by trigger' WHERE f_int1 = - old.f_int1; END| DELETE FROM t0_aux WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); # check trigger-8 success: 1 DROP TRIGGER trg_1; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = 'just inserted' WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); DELETE FROM t0_aux WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; DELETE FROM t1 WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = old.f_int1 + @max_row, new.f_int2 = old.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-9 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW BEGIN SET new.f_int1 = new.f_int1 + @max_row, new.f_int2 = new.f_int2 - @max_row, new.f_charbig = '####updated per update trigger####'; END| UPDATE t1 SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, f_charbig = '####updated per update statement itself####'; # check trigger-10 success: 1 DROP TRIGGER trg_2; UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), f_int2 = CAST(f_char1 AS SIGNED INT), f_charbig = CONCAT('===',f_char1,'==='); CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-11 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW BEGIN SET new.f_int1 = @my_max1 + @counter, new.f_int2 = @my_min2 - @counter, new.f_charbig = '####updated per insert trigger####'; SET @counter = @counter + 1; END| SET @counter = 1; SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; INSERT INTO t1 (f_char1, f_char2, f_charbig) SELECT CAST(f_int1 AS CHAR), CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 ORDER BY f_int1; DROP TRIGGER trg_3; # check trigger-12 success: 1 DELETE FROM t1 WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) AND f_int2 <> CAST(f_char1 AS SIGNED INT) AND f_charbig = '####updated per insert trigger####'; ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK CHECK TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 check status OK CHECKSUM TABLE t1 EXTENDED; Table Checksum test.t1 <some_value> OPTIMIZE TABLE t1; Table Op Msg_type Msg_text test.t1 optimize status OK # check layout success: 1 REPAIR TABLE t1 EXTENDED; Table Op Msg_type Msg_text test.t1 repair status OK # check layout success: 1 TRUNCATE t1; # check TRUNCATE success: 1 # check layout success: 1 # End usability test (inc/partition_check.inc) DROP TABLE t1; DROP VIEW IF EXISTS v1; DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t0_aux; DROP TABLE IF EXISTS t0_definition; DROP TABLE IF EXISTS t0_template;