mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
partition is corrupt The main problem was that ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION took another code path (over mysql_alter_table instead of mysql_admin_table) which differs in two ways: 1) alter table opens the tables in a different way than admin tables do resulting in returning with error before it tried the command 2) alter table does not start to send any diagnostic rows to the client which the lower admin functions continue to use -> resulting in assertion crash The fix: Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION to use the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE t. Adding check in mysql_admin_table to setup the partition list for which partitions that should be used. Partitioned tables will still not work with REPAIR TABLE/PARTITION USE_FRM, since that requires moving partitions to tables, REPAIR TABLE t USE_FRM, and check that the data still fulfills the partitioning function and then move the table back to being a partition. NOTE: I have removed the following functions from the handler interface: analyze_partitions, check_partitions, optimize_partitions, repair_partitions Since they are not longer needed. THIS ALTERS THE STORAGE ENGINE API mysql-test/r/handler_innodb.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added a note result row. mysql-test/r/innodb.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added a note result row. mysql-test/r/innodb_mysql.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added a note result row. mysql-test/r/partition.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned tables. mysql-test/r/trigger-trans.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added a note result row. mysql-test/suite/ndb/r/ndb_partition_key.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned tables. mysql-test/suite/ndb/t/ndb_partition_key.test: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned tables. mysql-test/suite/parts/inc/partition_alter4.inc: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned tables. mysql-test/suite/parts/r/partition_alter4_innodb.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned tables. mysql-test/suite/parts/r/partition_alter4_myisam.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned tables. mysql-test/suite/rpl/r/rpl_failed_optimize.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added a note result row. mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added a note result row. mysql-test/t/partition.test: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Updated after fixing ANALYZE/CHECK/OPTIMIZE/REPAIR partitioned tables. sql/ha_partition.cc: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added a function for returning admin commands result rows Updated handle_opt_partitions to handle admin commands result rows, and some error filtering (as mysql_admin_table do). Removed the functions analyze/check/optimize/repair_partitions since they have no longer any use. sql/ha_partition.h: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Removed analyze/check/optimize/repair_partitions since they are no longer are needed. sql/handler.cc: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Removed analyze/check/optimize/repair_partitions since they are no longer are needed. sql/handler.h: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Removed analyze/check/optimize/repair_partitions since they are no longer are needed. sql/mysql_priv.h: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added set_part_state for reuse of code in mysql_admin_table. (Originally fond in sql/sql_partition.cc:prep_alter_part_table) sql/protocol.cc: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added one assert and a debug print. sql/sql_partition.cc: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Refactored code for setting up partition state, set_part_state, now used in both prep_alter_part_table and sql_table.cc:mysql_admin_table. Removed code for handling ANALYZE/CHECK/OPTIMIZE/REPAIR partitions, since it is now handled by mysql_admin_table. sql/sql_table.cc: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Added functionality in mysql_admin_table to work with partitioned tables. Fixed a possible assertion bug for HA_ADMIN_TRY_ALTER (If analyze would output a row, it fails since the row was already started). sql/sql_yacc.yy: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION to use the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE instead of taking the ALTER TABLE path. Added reset of alter_info for ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE since it is now used by partitioned tables. storage/myisam/mi_check.c: Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that partition is corrupt Changed warning message from "Found X parts Should be: Y parts" to "Found X key parts. Should be Y", since it could be confusing with partitioned tables.
88766 lines
3.1 MiB
88766 lines
3.1 MiB
SET @max_row = 20;
|
|
SET @@session.storage_engine = 'InnoDB';
|
|
|
|
#------------------------------------------------------------------------
|
|
# 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= '';
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 analyze status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 CHECK PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REBUILD PARTITION ALL;
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (f_int1) (PARTITION part_1 ENGINE = InnoDB, PARTITION part_2 ENGINE = InnoDB, PARTITION part_3 ENGINE = InnoDB, PARTITION part_4 ENGINE = InnoDB, PARTITION part_5 ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) ENGINE = InnoDB, PARTITION part_2 VALUES IN (-2) ENGINE = InnoDB, PARTITION part_1 VALUES IN (-1) ENGINE = InnoDB, PARTITION part_N VALUES IN (NULL) ENGINE = InnoDB, PARTITION part0 VALUES IN (0) ENGINE = InnoDB, PARTITION part1 VALUES IN (1) ENGINE = InnoDB, PARTITION part2 VALUES IN (2) ENGINE = InnoDB, PARTITION part3 VALUES IN (3) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION part_1 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_2 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (15) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES LESS THAN (5) ENGINE = InnoDB, PARTITION part_3 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part_1 VALUES LESS THAN (0) (SUBPARTITION subpart11 ENGINE = InnoDB, SUBPARTITION subpart12 ENGINE = InnoDB), PARTITION part_2 VALUES LESS THAN (5) (SUBPARTITION subpart21 ENGINE = InnoDB, SUBPARTITION subpart22 ENGINE = InnoDB), PARTITION part_3 VALUES LESS THAN (10) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB), PARTITION part_4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = InnoDB, SUBPARTITION subpart42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, SUBPARTITION sp12 ENGINE = InnoDB), PARTITION part_2 VALUES IN (1) (SUBPARTITION sp21 ENGINE = InnoDB, SUBPARTITION sp22 ENGINE = InnoDB), PARTITION part_3 VALUES IN (2) (SUBPARTITION sp31 ENGINE = InnoDB, SUBPARTITION sp32 ENGINE = InnoDB), PARTITION part_4 VALUES IN (NULL) (SUBPARTITION sp41 ENGINE = InnoDB, SUBPARTITION sp42 ENGINE = InnoDB)) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
ALTER TABLE t1 REPAIR PARTITION ALL;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
INSERT INTO t1(f_int1,f_int2,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=InnoDB 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 = InnoDB, PARTITION part_2 VALUES IN (1) ENGINE = InnoDB, PARTITION part_3 VALUES IN (NULL) ENGINE = InnoDB) */
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# check layout success: 1
|
|
TRUNCATE t1;
|
|
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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);
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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));
|
|
INSERT INTO t1(f_int1,f_int2,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;
|
|
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=InnoDB DEFAULT CHARSET=latin1
|
|
|
|
# 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;
|
|
|
|
# check transactions-6 success: 1
|
|
# INFO: Storage engine used for t1 seems to be transactional.
|
|
COMMIT;
|
|
|
|
# check transactions-7 success: 1
|
|
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
|
COMMIT WORK;
|
|
SET @@session.sql_mode = 'traditional';
|
|
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 able to revert
|
|
# changes made by the failing statement.
|
|
SET @@session.sql_mode = '';
|
|
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 note Table does not support optimize, doing recreate + analyze instead
|
|
test.t1 optimize status OK
|
|
# check layout success: 1
|
|
REPAIR TABLE t1 EXTENDED;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 repair note The storage engine for the table doesn't support repair
|
|
# 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;
|