polardbxengine/mysql-test/suite/innodb/t/partition_autoinc.test

501 lines
11 KiB
Plaintext

--source include/have_innodb_max_16k.inc
CALL mtr.add_suppression('Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.');
let $file_name_checking = SELECT LOWER(path) FROM information_schema.innodb_tablespaces AS `t`, information_schema.innodb_datafiles AS `df`
WHERE t.space = df.space
AND t.space_type = 'Single'
AND df.path NOT LIKE './mysql/%'
AND df.path NOT LIKE '%undo%'
AND df.path NOT LIKE '._mysql_%'
ORDER BY t.name;
CREATE TABLE tr (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id));
INSERT INTO tr VALUES
(1, 'desk organiser', '2003-10-15'),
(2, 'CD player', '1993-11-05'),
(3, 'TV set', '1996-03-10'),
(4, 'bookcase', '1982-01-10'),
(5, 'exercise bike', '2004-05-09'),
(6, 'sofa', '1987-06-05');
###############################
--echo # Test for ADD PARTITION
###############################
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id))
PARTITION BY RANGE( YEAR(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (2005)
);
--disable_warnings
INSERT INTO t1 SELECT * FROM tr;
--enable_warnings
SHOW CREATE TABLE t1;
DELETE FROM t1 WHERE id = 6;
SELECT MAX(id) AS `Expect 5` FROM t1;
ALTER TABLE t1 ALGORITHM = INPLACE, ADD PARTITION (PARTITION p4 VALUES LESS THAN (2010), PARTITION p5 VALUES LESS THAN (2015));
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES (0, 'popcorn maker', '2010-11-22');
SELECT MAX(id) AS `Expect 7` FROM t1;
ALTER TABLE t1 ALGORITHM = INPLACE, ADD PARTITION (PARTITION p6 VALUES LESS THAN (2018), PARTITION p7 VALUES LESS THAN (2020));
--eval $file_name_checking
SHOW CREATE TABLE t1;
--source include/restart_mysqld.inc
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES
(0, 'aquarium', '2019-08-04'),
(0, 'study desk', '2016-06-18');
SELECT MAX(id) AS `Expect 9` FROM t1;
DROP TABLE t1;
###############################################################
--echo # Test for DROP PARTITION, along with some ADD PARTITION
###############################################################
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id))
PARTITION BY RANGE( YEAR(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (2005)
);
--disable_warnings
INSERT INTO t1 SELECT * FROM tr;
--enable_warnings
SHOW CREATE TABLE t1;
SELECT id FROM t1 PARTITION(p0);
SELECT id FROM t1 PARTITION(p1);
SELECT id FROM t1 PARTITION(p2);
SELECT id FROM t1 PARTITION(p3);
--echo # This doesn't delete the row containing max(id) in the table
ALTER TABLE t1 ALGORITHM = INPLACE, DROP PARTITION p2;
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES (0, 'aquarium', '2001-07-02');
SELECT MAX(id) AS `Expect 7` FROM t1;
--echo # This will delete the row containing max(id) in the table
ALTER TABLE t1 ALGORITHM = INPLACE, DROP PARTITION p3;
--eval $file_name_checking
SELECT MAX(id) AS `Expect 6` FROM t1;
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES(0, 'study desk', '1988-09-16');
SELECT MAX(id) AS `Expect 8` FROM t1;
ALTER TABLE t1 ALGORITHM = INPLACE, ADD PARTITION (PARTITION p3 VALUES LESS THAN (2008));
--eval $file_name_checking
ALTER TABLE t1 ALGORITHM = INPLACE, DROP PARTITION p0;
--eval $file_name_checking
SHOW CREATE TABLE t1;
--source include/restart_mysqld.inc
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES(0, 'lava lamp', '2006-01-02');
SELECT MAX(id) AS `Expect 9` FROM t1;
DELETE FROM t1 WHERE id >= 0;
ALTER TABLE t1 ALGORITHM = INPLACE, DROP PARTITION p3;
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES(0, 'lava lamp', '1992-01-15');
SELECT MAX(id) AS `Expect 10` FROM t1;
DROP TABLE t1;
#####################################################
--echo # Test for ADD PARTITION for HASH PARTITIONING
#####################################################
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id))
PARTITION BY HASH( YEAR(purchased) ) PARTITIONS 4;
--disable_warnings
INSERT INTO t1 SELECT * FROM tr;
--enable_warnings
SHOW CREATE TABLE t1;
DELETE FROM t1 WHERE id = 6;
SELECT MAX(id) AS `Expect 5` FROM t1;
ALTER TABLE t1 ALGORITHM = INPLACE, ADD PARTITION PARTITIONS 2;
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES (0, 'popcorn maker', '2010-11-22');
SELECT MAX(id) AS `Expect 7` FROM t1;
ALTER TABLE t1 ALGORITHM = INPLACE, ADD PARTITION PARTITIONS 2;
--eval $file_name_checking
SHOW CREATE TABLE t1;
--source include/restart_mysqld.inc
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES
(0, 'aquarium', '2019-08-04'),
(0, 'study desk', '2016-06-18');
SELECT MAX(id) AS `Expect 9` FROM t1;
DROP TABLE t1;
#######################################################
--echo # Test for ADD PARTITION for HASH PARTITIONINNG,
--echo # along with COALESCE PARTITION
#######################################################
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id))
PARTITION BY HASH( YEAR(purchased) ) PARTITIONS 8;
--disable_warnings
INSERT INTO t1 SELECT * FROM tr;
--enable_warnings
SHOW CREATE TABLE t1;
DELETE FROM t1 WHERE id = 6;
SELECT MAX(id) AS `Expect 5` FROM t1;
ALTER TABLE t1 ALGORITHM = INPLACE, COALESCE PARTITION 2;
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES (0, 'popcorn maker', '2010-11-22');
SELECT MAX(id) AS `Expect 7` FROM t1;
SHOW CREATE TABLE t1;
ALTER TABLE t1 ALGORITHM = INPLACE, COALESCE PARTITION 4;
--eval $file_name_checking
--source include/restart_mysqld.inc
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES
(0, 'aquarium', '2019-08-04'),
(0, 'study desk', '2016-06-18');
SELECT MAX(id) AS `Expect 9` FROM t1;
SHOW CREATE TABLE t1;
DROP TABLE t1;
######################################
--echo # Test for REORGANIZE PARTITION
######################################
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id))
PARTITION BY RANGE( YEAR(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (2005)
);
--disable_warnings
INSERT INTO t1 SELECT * FROM tr;
--enable_warnings
SHOW CREATE TABLE t1;
DELETE FROM t1 WHERE id = 6;
SELECT MAX(id) AS `Expect 5` FROM t1;
ALTER TABLE t1 ALGORITHM = INPLACE, REORGANIZE PARTITION p0, p1 INTO
(PARTITION p01 VALUES LESS THAN(1985), PARTITION p02 VALUES LESS THAN(1990),
PARTITION p11 VALUES LESS THAN(1993), PARTITION p12 VALUES LESS THAN(1995));
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES (0, 'popcorn maker', '2001-11-22');
SELECT MAX(id) AS `Expect 7` FROM t1;
SHOW CREATE TABLE t1;
ALTER TABLE t1 ALGORITHM = INPLACE, REORGANIZE PARTITION p2, p3 INTO
(PARTITION p21 VALUES LESS THAN(1997), PARTITION p22 VALUES LESS THAN(2000),
PARTITION p31 VALUES LESS THAN(2002), PARTITION p32 VALUES LESS THAN(2005));
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES
(0, 'aquarium', '2002-08-04'),
(0, 'study desk', '2004-06-18');
SELECT MAX(id) AS `Expect 9` FROM t1;
SHOW CREATE TABLE t1;
###################################
--echo # Test for REBUILD PARTITION
###################################
ALTER TABLE t1 ALGORITHM = INPLACE, REBUILD PARTITION p01, p02, p31, p32;
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES (0, 'lava lamp', '2000-12-10');
SHOW CREATE TABLE t1;
SELECT MAX(id) AS `Expect 10` FROM t1;
DROP TABLE t1;
####################################
--echo # Test for EXCHANGE PARTITION
####################################
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id))
PARTITION BY RANGE( YEAR(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (2005)
);
--disable_warnings
INSERT INTO t1 SELECT * FROM tr;
--enable_warnings
SHOW CREATE TABLE t1;
DELETE FROM t1 WHERE id = 6;
SELECT MAX(id) AS `Expect 5` FROM t1;
CREATE TABLE tp (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id)) ENGINE = InnoDB;
INSERT INTO tp VALUES (100, 'DVD player', '2002-03-21');
ALTER TABLE t1 EXCHANGE PARTITION p3 WITH TABLE tp;
--eval $file_name_checking
SHOW CREATE TABLE tp;
SHOW CREATE TABLE t1;
INSERT INTO tp VALUES(0, 'DVD player', '2002-03-22');
INSERT INTO t1 VALUES(0, 'DVD player', '2002-03-23');
SELECT MAX(id) AS `Expect 101` FROM t1;
SELECT MAX(id) AS `Expect 101` FROM tp;
ALTER TABLE t1 EXCHANGE PARTITION p3 WITH TABLE tp;
--eval $file_name_checking
SHOW CREATE TABLE tp;
SHOW CREATE TABLE t1;
INSERT INTO tp VALUES(0, 'DVD player', '2002-03-24');
INSERT INTO t1 VALUES(0, 'DVD player', '2002-03-25');
SELECT MAX(id) AS `Expect 102` FROM t1;
SELECT MAX(id) AS `Expect 102` FROM tp;
DROP TABLE tp, t1;
#################################
--echo # Test for subpartitioning
#################################
CREATE TABLE t1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
purchased DATE,
KEY(id))
PARTITION BY RANGE( YEAR(purchased) )
SUBPARTITION BY HASH ( YEAR(purchased) )
(PARTITION p0 VALUES LESS THAN (1990)
(SUBPARTITION sp00, SUBPARTITION sp01),
PARTITION p1 VALUES LESS THAN (2000)
(SUBPARTITION sp10, SUBPARTITION sp11),
PARTITION p2 VALUES LESS THAN (2010)
(SUBPARTITION sp20, SUBPARTITION sp21));
--disable_warnings
INSERT INTO t1 SELECT * FROM tr;
--enable_warnings
SHOW CREATE TABLE t1;
DELETE FROM t1 WHERE id = 6;
SELECT MAX(id) AS `Expect 5` FROM t1;
INSERT INTO t1 VALUES
(0, 'popcorn maker', '2008-07-05'),
(0, 'lava lamp', '2009-01-23');
SELECT MAX(id) AS `Expect 8` FROM t1;
SHOW CREATE TABLE t1;
ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN(2015) (SUBPARTITION sp30, SUBPARTITION sp31));
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES
(0, 'study desk', '2012-02-20');
SELECT MAX(id) AS `Expect 9` FROM t1;
DELETE FROM t1 WHERE id = 9;
SHOW CREATE TABLE t1;
ALTER TABLE t1 DROP PARTITION p3;
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES
(0, 'study desk', '2009-05-06');
SELECT MAX(id) AS `Expect 10` FROM t1;
INSERT INTO t1 VALUES
(0, 'lava lamp', '2007-12-25'),
(0, 'lava lamp', '2007-12-26'),
(0, 'lava lamp', '2003-12-27');
SHOW CREATE TABLE t1;
ALTER TABLE t1 REORGANIZE PARTITION p2 INTO
(PARTITION p21 VALUES LESS THAN (2005)
(SUBPARTITION sp210, SUBPARTITION sp211),
PARTITION p22 VALUES LESS THAN (2010)
(SUBPARTITION sp220, SUBPARTITION sp221));
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES(0, 'lava lamp', '2002-12-28');
SELECT MAX(id) AS `Expect 14` FROM t1;
ALTER TABLE t1 DROP PARTITION p21, p0;
--eval $file_name_checking
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES
(0, 'lava lamp', '2005-12-30'),
(0, 'lava lamp', '2005-12-31');
SELECT MAX(id) AS `Expect 16` FROM t1;
SHOW CREATE TABLE t1;
DROP TABLE t1;
DROP TABLE tr;