#--disable_abort_on_error # # Simple test for the partition storage engine # Focuses on range partitioning tests # -- source include/have_partition.inc --disable_warnings drop table if exists t1; --enable_warnings # # Partition by range, basic # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); # Simple insert and verify test INSERT into t1 values (1, 1, 1); INSERT into t1 values (6, 1, 1); INSERT into t1 values (10, 1, 1); INSERT into t1 values (15, 1, 1); select * from t1; show create table t1; ALTER TABLE t1 partition by range (a) partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); select * from t1; show create table t1; drop table if exists t1; # # Partition by range, basic # No primary key # CREATE TABLE t1 ( a int not null, b int not null, c int not null) partition by range (a) partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); # Simple insert and verify test INSERT into t1 values (1, 1, 1); INSERT into t1 values (6, 1, 1); INSERT into t1 values (10, 1, 1); INSERT into t1 values (15, 1, 1); select * from t1; ALTER TABLE t1 partition by range (a) partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); select * from t1; drop table if exists t1; # # Partition by range, basic # No max value used # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than (15) tablespace ts3); # Simple insert and verify test INSERT into t1 values (1, 1, 1); INSERT into t1 values (6, 1, 1); INSERT into t1 values (10, 1, 1); --error ER_NO_PARTITION_FOR_GIVEN_VALUE INSERT into t1 values (15, 1, 1); select * from t1; ALTER TABLE t1 partition by range (a) partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than (15) tablespace ts3); select * from t1; drop table t1; # # Partition by range, only one partition # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) (partition x1 values less than (1)); drop table t1; # # Subpartition by hash, two partitions and two subpartitions # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11, subpartition x12), partition x2 values less than (5) ( subpartition x21, subpartition x22) ); SELECT * from t1; show create table t1; ALTER TABLE t1 ADD COLUMN d int; show create table t1; drop table t1; # # Subpartition by hash, two partitions and two subpartitions # Defined tablespace, engine and node group # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 tablespace t1 engine myisam nodegroup 0, subpartition x12 tablespace t2 engine myisam nodegroup 1), partition x2 values less than (5) ( subpartition x21 tablespace t1 engine myisam nodegroup 0, subpartition x22 tablespace t2 engine myisam nodegroup 1) ); SELECT * from t1; drop table t1; # # Subpartition by hash, two partitions and two subpartitions # Defined tablespace, node group # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 tablespace t1 nodegroup 0, subpartition x12 tablespace t2 nodegroup 1), partition x2 values less than (5) ( subpartition x21 tablespace t1 nodegroup 0, subpartition x22 tablespace t2 nodegroup 1) ); SELECT * from t1; drop table t1; # # Subpartition by hash, two partitions and two subpartitions # Defined engine and node group # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 engine myisam nodegroup 0, subpartition x12 engine myisam nodegroup 1), partition x2 values less than (5) ( subpartition x21 engine myisam nodegroup 0, subpartition x22 engine myisam nodegroup 1) ); INSERT into t1 VALUES (1,1,1); INSERT into t1 VALUES (4,1,1); --error ER_NO_PARTITION_FOR_GIVEN_VALUE INSERT into t1 VALUES (5,1,1); SELECT * from t1; ALTER TABLE t1 partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 engine myisam nodegroup 0, subpartition x12 engine myisam nodegroup 1), partition x2 values less than (5) ( subpartition x21 engine myisam nodegroup 0, subpartition x22 engine myisam nodegroup 1) ); SELECT * from t1; drop table t1; # # Subpartition by hash, two partitions and two subpartitions # Defined tablespace, engine # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 tablespace t1 engine myisam, subpartition x12 tablespace t2 engine myisam), partition x2 values less than (5) ( subpartition x21 tablespace t1 engine myisam, subpartition x22 tablespace t2 engine myisam) ); INSERT into t1 VALUES (1,1,1); INSERT into t1 VALUES (4,1,1); --error ER_NO_PARTITION_FOR_GIVEN_VALUE INSERT into t1 VALUES (5,1,1); SELECT * from t1; ALTER TABLE t1 partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 tablespace t1 engine myisam, subpartition x12 tablespace t2 engine myisam), partition x2 values less than (5) ( subpartition x21 tablespace t1 engine myisam, subpartition x22 tablespace t2 engine myisam) ); SELECT * from t1; drop table t1; # # Subpartition by hash, two partitions and two subpartitions # Defined tablespace # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 tablespace t1, subpartition x12 tablespace t2), partition x2 values less than (5) ( subpartition x21 tablespace t1, subpartition x22 tablespace t2) ); INSERT into t1 VALUES (1,1,1); INSERT into t1 VALUES (4,1,1); --error ER_NO_PARTITION_FOR_GIVEN_VALUE INSERT into t1 VALUES (5,1,1); SELECT * from t1; ALTER TABLE t1 partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 tablespace t1 engine myisam, subpartition x12 tablespace t2 engine myisam), partition x2 values less than (5) ( subpartition x21 tablespace t1 engine myisam, subpartition x22 tablespace t2 engine myisam) ); SELECT * from t1; drop table t1; # # Subpartition by hash, two partitions and two subpartitions # Defined engine # CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 engine myisam, subpartition x12 engine myisam), partition x2 values less than (5) ( subpartition x21 engine myisam, subpartition x22 engine myisam) ); INSERT into t1 VALUES (1,1,1); INSERT into t1 VALUES (4,1,1); --error ER_NO_PARTITION_FOR_GIVEN_VALUE INSERT into t1 VALUES (5,1,1); SELECT * from t1; ALTER TABLE t1 partition by range (a) subpartition by hash (a+b) ( partition x1 values less than (1) ( subpartition x11 engine myisam, subpartition x12 engine myisam), partition x2 values less than (5) ( subpartition x21 engine myisam, subpartition x22 engine myisam) ); SELECT * from t1; drop table t1; # # Bug #17894 Comparison with "less than" operator fails with Range partition # CREATE TABLE t1 (c1 int default NULL, c2 varchar(30) default NULL, c3 date default NULL) engine=myisam PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995), PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) , PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) , PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) , PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) , PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010), PARTITION p11 VALUES LESS THAN MAXVALUE ); INSERT INTO t1 VALUES (1, 'testing partitions', '1995-07-17'), (3, 'testing partitions','1995-07-31'), (5, 'testing partitions','1995-08-13'), (7, 'testing partitions','1995-08-26'), (9, 'testing partitions','1995-09-09'), (0, 'testing partitions','2000-07-10'), (2, 'testing partitions','2000-07-23'), (4, 'testing partitions','2000-08-05'), (6, 'testing partitions','2000-08-19'), (8, 'testing partitions','2000-09-01'); SELECT COUNT(*) FROM t1 WHERE c3 BETWEEN '1996-12-31' AND '2000-12-31'; SELECT COUNT(*) FROM t1 WHERE c3 < '2000-12-31'; DROP TABLE t1; # # BUG 16002: Unsigned partition functions not handled correctly # --error ER_RANGE_NOT_INCREASING_ERROR create table t1 (a bigint unsigned) partition by range (a) (partition p0 values less than (10), partition p1 values less than (0)); create table t1 (a bigint unsigned) partition by range (a) (partition p0 values less than (0), partition p1 values less than (10)); show create table t1; drop table t1; create table t1 (a bigint unsigned) partition by range (a) (partition p0 values less than (2), partition p1 values less than (10)); show create table t1; --error ER_NO_PARTITION_FOR_GIVEN_VALUE insert into t1 values (0xFFFFFFFFFFFFFFFF); drop table t1;