mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
4ec088f2e7
DEFAULT partition support added to LIST and LIST COLUMN partitioning. Partitions Prunning added for DEFAULT partititon.
455 lines
12 KiB
Text
455 lines
12 KiB
Text
|
|
--source include/have_partition.inc
|
|
|
|
#
|
|
# expression lists
|
|
#
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1)
|
|
)
|
|
;
|
|
--error ER_NO_PARTITION_FOR_GIVEN_VALUE
|
|
insert into t1 values (10,10);
|
|
drop table t1;
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1),
|
|
PARTITION p0 DEFAULT
|
|
)
|
|
;
|
|
show create table t1;
|
|
insert into t1 values (10,10);
|
|
insert into t1 values (4,4);
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
drop table t1;
|
|
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1),
|
|
PARTITION p0 DEFAULT,
|
|
PARTITION p3 DEFAULT
|
|
)
|
|
;
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p0 DEFAULT,
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1),
|
|
PARTITION p3 DEFAULT
|
|
)
|
|
;
|
|
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p0 DEFAULT,
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1)
|
|
)
|
|
;
|
|
show create table t1;
|
|
insert into t1 values (10,10);
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
drop table t1;
|
|
|
|
#
|
|
# Default has its value as 0 check that they are not clash.
|
|
#
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p0 DEFAULT,
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1, 0)
|
|
)
|
|
;
|
|
show create table t1;
|
|
insert into t1 values (10,10);
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
drop table t1;
|
|
|
|
#
|
|
# columns lists
|
|
#
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)),
|
|
PARTITION p1 VALUES IN ((1,1),(0,0)),
|
|
PARTITION p0 DEFAULT
|
|
)
|
|
;
|
|
show create table t1;
|
|
insert into t1 values (10,10);
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
drop table t1;
|
|
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)),
|
|
PARTITION p1 VALUES IN ((1,1),(0,0)),
|
|
PARTITION p0 DEFAULT,
|
|
PARTITION p3 DEFAULT
|
|
)
|
|
;
|
|
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p0 DEFAULT,
|
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)),
|
|
PARTITION p1 VALUES IN ((1,1),(0,0)),
|
|
PARTITION p3 DEFAULT
|
|
)
|
|
;
|
|
|
|
#
|
|
# partititon prunning test
|
|
#
|
|
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1,20),
|
|
PARTITION p0 default
|
|
)
|
|
;
|
|
show create table t1;
|
|
insert into t1 values (10,10);
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
select * from t1 where a=10;
|
|
select * from t1 where a<=10;
|
|
select * from t1 where a<=20;
|
|
select * from t1 where a>=10;
|
|
select * from t1 where a>=5;
|
|
insert into t1 values (20,20),(5,5);
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
select * from t1 where a=10;
|
|
select * from t1 where a<=10;
|
|
select * from t1 where a<=20;
|
|
select * from t1 where a>=10;
|
|
select * from t1 where a>=5;
|
|
explain partitions select * from t1 where a=10;
|
|
explain partitions select * from t1 where a=5;
|
|
select * from t1 where a=10 or a=5;
|
|
explain partitions select * from t1 where a=10 or a=5;
|
|
|
|
drop table t1;
|
|
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6),(5,5)),
|
|
PARTITION p1 VALUES IN ((1,1),(20,20)),
|
|
PARTITION p0 DEFAULT
|
|
)
|
|
;
|
|
show create table t1;
|
|
insert into t1 values (10,10);
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
select * from t1 where a=10 and b=10;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
select * from t1 where a=10;
|
|
explain partitions select * from t1 where a=10;
|
|
select * from t1 where a<=10;
|
|
select * from t1 where a>=10;
|
|
insert into t1 values (20,20),(5,5);
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
select * from t1 where a=10 and b=10;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
select * from t1 where a=10 and b=10 or a=20 and b=20;
|
|
explain partitions select * from t1 where a=10 and b=10 or a=20 and b=20;
|
|
drop table t1;
|
|
|
|
#
|
|
# partition pruning with expressions
|
|
#
|
|
create table t1 (a int, b int);
|
|
|
|
insert into t1 values (10,10),(2,5),(0,0);
|
|
|
|
select * from t1;
|
|
|
|
alter table t1
|
|
PARTITION BY LIST (a+b)
|
|
(
|
|
PARTITION p2 VALUES IN (1,2,3,7),
|
|
PARTITION p1 VALUES IN (21,0),
|
|
PARTITION p0 DEFAULT
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
explain partitions select * from t1 where a=2 and b=5;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
drop table t1;
|
|
|
|
create table t1 (a int, b int);
|
|
|
|
insert into t1 values (10,10),(2,5),(0,0);
|
|
|
|
select * from t1;
|
|
|
|
alter table t1
|
|
PARTITION BY LIST (a+5)
|
|
(
|
|
PARTITION p2 VALUES IN (1,2,3,7),
|
|
PARTITION p1 VALUES IN (0),
|
|
PARTITION p0 DEFAULT
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
explain partitions select * from t1 where a>=2;
|
|
explain partitions select * from t1 where a>=2 and a<=3;
|
|
explain partitions select * from t1 where a=10;
|
|
drop table t1;
|
|
|
|
|
|
|
|
CREATE TABLE t1 (a DATE, KEY(a))
|
|
PARTITION BY LIST (TO_DAYS(a))
|
|
(PARTITION `pDEF` DEFAULT,
|
|
PARTITION `p2001-01-01` VALUES IN (TO_DAYS('2001-01-01')),
|
|
PARTITION `pNULL` VALUES IN (NULL),
|
|
PARTITION `p0000-01-02` VALUES IN (TO_DAYS('0000-01-02')),
|
|
PARTITION `p1001-01-01` VALUES IN (TO_DAYS('1001-01-01')));
|
|
if ($verify_without_partitions)
|
|
{
|
|
ALTER TABLE t1 REMOVE PARTITIONING;
|
|
}
|
|
INSERT INTO t1 VALUES ('0000-00-00'), ('0000-01-02'), ('0001-01-01'),
|
|
('1001-00-00'), ('1001-01-01'), ('1002-00-00'), ('2001-01-01');
|
|
--source include/partition_date_range.inc
|
|
--echo # test without index
|
|
ALTER TABLE t1 DROP KEY a;
|
|
--source include/partition_date_range.inc
|
|
DROP TABLE t1;
|
|
--echo # TO_SECONDS, test of LIST and index
|
|
CREATE TABLE t1 (a DATE, KEY(a))
|
|
PARTITION BY LIST (TO_SECONDS(a))
|
|
(PARTITION `pDEF` DEFAULT,
|
|
PARTITION `p2001-01-01` VALUES IN (TO_SECONDS('2001-01-01')),
|
|
PARTITION `pNULL` VALUES IN (NULL),
|
|
PARTITION `p0000-01-02` VALUES IN (TO_SECONDS('0000-01-02')),
|
|
PARTITION `p1001-01-01` VALUES IN (TO_SECONDS('1001-01-01')));
|
|
if ($verify_without_partitions)
|
|
{
|
|
ALTER TABLE t1 REMOVE PARTITIONING;
|
|
}
|
|
INSERT INTO t1 VALUES ('0000-00-00'), ('0000-01-02'), ('0001-01-01'),
|
|
('1001-00-00'), ('1001-01-01'), ('1002-00-00'), ('2001-01-01');
|
|
--source include/partition_date_range.inc
|
|
--echo # test without index
|
|
ALTER TABLE t1 DROP KEY a;
|
|
--source include/partition_date_range.inc
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# ALTER TABLE test
|
|
#
|
|
|
|
create table t1 (a int, b int);
|
|
|
|
insert into t1 values (10,10),(2,5),(0,0);
|
|
|
|
select * from t1;
|
|
|
|
alter table t1
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 VALUES IN (1,2,3),
|
|
PARTITION p1 VALUES IN (20,0),
|
|
PARTITION p0 DEFAULT
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
explain partitions select * from t1 where a=2 and b=5;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
alter table t1
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 VALUES IN (1,2,3),
|
|
PARTITION p1 VALUES IN (20,0),
|
|
PARTITION p0 VALUES IN (10)
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
explain partitions select * from t1 where a=2 and b=5;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
alter table t1
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 DEFAULT,
|
|
PARTITION p1 VALUES IN (20,0),
|
|
PARTITION p0 VALUES IN (10)
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
explain partitions select * from t1 where a=2 and b=5;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
|
|
--error ER_NO_PARTITION_FOR_GIVEN_VALUE
|
|
alter table t1 drop partition p2;
|
|
delete from t1 where a=2;
|
|
alter table t1 drop partition p2;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
|
|
alter table t1 add partition (PARTITION pd DEFAULT);
|
|
show create table t1;
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
alter table t1 add partition (PARTITION pdd DEFAULT);
|
|
alter table t1 drop partition pd;
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
alter table t1 add partition (PARTITION pdd DEFAULT,
|
|
PARTITION pd DEFAULT);
|
|
|
|
drop table t1;
|
|
|
|
create table t1 (a int, b int);
|
|
|
|
insert into t1 values (10,10),(2,5),(0,0);
|
|
|
|
select * from t1;
|
|
|
|
alter table t1
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)),
|
|
PARTITION p1 VALUES IN ((1,1),(0,0)),
|
|
PARTITION p0 DEFAULT
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
explain partitions select * from t1 where a=2 and b=5;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
alter table t1
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)),
|
|
PARTITION p1 VALUES IN ((1,1),(0,0)),
|
|
PARTITION p0 VALUES IN ((10,10))
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
explain partitions select * from t1 where a=2 and b=5;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
alter table t1
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p2 DEFAULT,
|
|
PARTITION p1 VALUES IN ((1,1),(0,0)),
|
|
PARTITION p0 VALUES IN ((10,10))
|
|
)
|
|
;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
explain partitions select * from t1 where a=2 and b=5;
|
|
explain partitions select * from t1 where a=10 and b=10;
|
|
|
|
--error ER_NO_PARTITION_FOR_GIVEN_VALUE
|
|
alter table t1 drop partition p2;
|
|
delete from t1 where a=2;
|
|
alter table t1 drop partition p2;
|
|
show create table t1;
|
|
select * from t1;
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
|
|
alter table t1 add partition (PARTITION pd DEFAULT);
|
|
show create table t1;
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
alter table t1 add partition (PARTITION pdd DEFAULT);
|
|
alter table t1 drop partition pd;
|
|
--error ER_PARTITION_DEFAULT_ERROR
|
|
alter table t1 add partition (PARTITION pdd DEFAULT,
|
|
PARTITION pd DEFAULT);
|
|
drop table t1;
|
|
|
|
|
|
#
|
|
# Problem of reorganizing DEFAULT partition
|
|
#
|
|
create table t1 (a int)
|
|
PARTITION BY LIST (a)
|
|
(
|
|
PARTITION p2 VALUES IN (4,5,6),
|
|
PARTITION p1 VALUES IN (1),
|
|
PARTITION pd DEFAULT
|
|
)
|
|
;
|
|
insert into t1 values (1),(2),(3),(4);
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
|
|
alter table t1 add partition
|
|
(partition p0 VALUES IN (2,3));
|
|
|
|
--sorted_result
|
|
select partition_name, table_rows from INFORMATION_SCHEMA.PARTITIONS where table_name='t1';
|
|
|
|
drop table t1;
|
|
|
|
#
|
|
# Check that first DEFAULT works in LIST COLUMN
|
|
#
|
|
create table t1 (a int, b int)
|
|
PARTITION BY LIST COLUMNS(a,b)
|
|
(
|
|
PARTITION p0 DEFAULT,
|
|
PARTITION p2 VALUES IN ((1,4),(2,5),(3,6)),
|
|
PARTITION p1 VALUES IN ((1,1),(0,0))
|
|
)
|
|
;
|
|
|
|
show create table t1;
|
|
|
|
drop table t1;
|