#--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; 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 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 1030 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; # # Partition by range, no partition => error # --error 1441 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a); # # Partition by range, invalid field in function # --error 1054 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a+d) partitions 2 (partition x1 values less than (4) tablespace ts1, partition x2 values less than (8) tablespace ts2); # # Partition by range, inconsistent partition function and constants # --error 1443 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 2 (partition x1 values less than (4.0) tablespace ts1, partition x2 values less than (8) tablespace ts2); # # Partition by range, constant partition function not allowed # --error 1435 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (3+4) partitions 2 (partition x1 values less than (4) tablespace ts1, partition x2 values less than (8) tablespace ts2); # # Partition by range, no values less than definition # --error 1429 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 2 (partition x1 values less than (4), partition x2); # # Partition by range, no values in definition allowed # --error 1430 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 2 (partition x1 values in (4), partition x2); # # Partition by range, values in error # --error 1430 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 2 (partition x1 values in (4), partition x2 values less than (5)); # # Partition by range, missing parenthesis # --error 1064 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by list (a) partitions 2 (partition x1 values less than 4, partition x2 values less than (5)); # # Partition by range, maxvalue in wrong place # --error 1064 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 2 (partition x1 values less than maxvalue, partition x2 values less than (5)); # # Partition by range, maxvalue in several places # --error 1064 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 2 (partition x1 values less than maxvalue, partition x2 values less than maxvalue); # # Partition by range, not increasing ranges # --error 1442 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (a) partitions 2 (partition x1 values less than (4), partition x2 values less than (3)); # # Partition by range, wrong result type of partition function # --error 1440 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key(a,b)) partition by range (sin(a)) partitions 2 (partition x1 values less than (4), partition x2 values less than (5)); # # 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; 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 1030 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 1030 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 1030 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 1030 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; # # Subpartition with range => error # --error 1429 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by range (a+b) subpartition by key (a) ( partition x1 ( subpartition x11 engine myisam, subpartition x12 engine myisam), partition x2 ( subpartition x21 engine myisam, subpartition x22 engine myisam) ); # # Subpartition with range => error # --error 1064 CREATE TABLE t1 ( a int not null, b int not null, c int not null, primary key (a,b)) partition by key (a) subpartition by range (a+b) ( partition x1 ( subpartition x11 engine myisam values less than (0), subpartition x12 engine myisam values less than (1)), partition x2 ( subpartition x21 engine myisam values less than (0), subpartition x22 engine myisam values less than (1)) );