mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
faa5f3e007
mysql-test/r/partition.result: A number of new test cases for unsigned partition functions mysql-test/r/partition_error.result: A number of new test cases for unsigned partition functions mysql-test/r/partition_range.result: A number of new test cases for unsigned partition functions mysql-test/t/partition.test: A number of new test cases for unsigned partition functions mysql-test/t/partition_error.test: A number of new test cases for unsigned partition functions mysql-test/t/partition_range.test: A number of new test cases for unsigned partition functions sql/ha_partition.cc: Error message for no partition found needs to take signed/unsigned into account when printing erroneus value sql/partition_element.h: Introduced signed_flag and max_value flag on partition elements Also list is now a list of a struct rather than simply longlong values Small rearranges of order sql/partition_info.cc: Introduced signed_flag and max_value flag on partition elements Also list is now a list of a struct rather than simply longlong values Small rearranges of order Lots of new code to handle checks of proper definition of table when partition function is unsigned sql/partition_info.h: Mostly rearrangement of code and some addition of a THD object in check_partition_info call plus a new method for comparing unsigned values sql/share/errmsg.txt: Negative values not ok for unsigned partition functions sql/sql_partition.cc: Fixed a multi-thread bug (when defining several partitioned tables in parallel) New code to generate partition syntax that takes into account sign of constants. Made function fix_fields_part_func more reusable. Fixed a number of get_partition_id functions for range and list and similar functions for partition pruning code. Unfortunately fairly much duplication of code with just small changes. sql/sql_partition.h: New function headers sql/sql_show.cc: Changed list of values for LIST partitioned tables Also fixed printing of unsigned values in INFORMATION SCHEMA for partitioned table sql/sql_table.cc: Fixed for new interface sql/sql_yacc.yy: Moved definition of struct to partition_element.h Added code to keep track of sign of constants in RANGE and LIST partitions sql/table.cc: Fixed for new interface
407 lines
9.8 KiB
Text
407 lines
9.8 KiB
Text
#--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 (0),
|
|
partition p1 values less than (10));
|
|
|
|
create table t1 (a bigint unsigned)
|
|
partition by range (a)
|
|
(partition p0 values less than (2),
|
|
partition p1 values less than (10));
|
|
--error ER_NO_PARTITION_FOR_GIVEN_VALUE
|
|
insert into t1 values (0xFFFFFFFFFFFFFFFF);
|
|
|
|
drop table t1;
|