mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 22:12:30 +01:00
3ac6a4b451
The default storage engine is changed from MyISAM to InnoDB, in all builds except for the embedded server. In addition, the following system variables are changed: * innodb_file_per_table is enabled * innodb_strict_mode is enabled * innodb_file_format_name_update is changed to 'Barracuda' The test suite is changed so that tests that do not explicitly include the have_innodb.inc are run with --default-storage-engine=MyISAM. This is to ease the transition, so that most regression tests are run with the same engine as before. Some tests are disabled for the embedded server regression test, as the output of certain statements will be different that for the regular server (i.e SELECT @@default_storage_engine). This is to ease transition.
375 lines
14 KiB
Text
375 lines
14 KiB
Text
drop table if exists t1, t2;
|
|
#
|
|
# Bug#51830: Incorrect partition pruning on range partition (regression)
|
|
#
|
|
CREATE TABLE t1 (a INT NOT NULL)
|
|
ENGINE = InnoDB
|
|
PARTITION BY RANGE(a)
|
|
(PARTITION p10 VALUES LESS THAN (10),
|
|
PARTITION p30 VALUES LESS THAN (30),
|
|
PARTITION p50 VALUES LESS THAN (50),
|
|
PARTITION p70 VALUES LESS THAN (70),
|
|
PARTITION p90 VALUES LESS THAN (90));
|
|
INSERT INTO t1 VALUES (10),(30),(50);
|
|
INSERT INTO t1 VALUES (70);
|
|
INSERT INTO t1 VALUES (80);
|
|
INSERT INTO t1 VALUES (89);
|
|
INSERT INTO t1 VALUES (90);
|
|
ERROR HY000: Table has no partition for value 90
|
|
INSERT INTO t1 VALUES (100);
|
|
ERROR HY000: Table has no partition for value 100
|
|
insert INTO t1 VALUES (110);
|
|
ERROR HY000: Table has no partition for value 110
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > 90;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= 90;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = 90;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = 89;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 p90 ALL NULL NULL NULL NULL 7 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= 89;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 p90 ALL NULL NULL NULL NULL 7 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > 89;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 7 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = 100;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 7 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= 100;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 7 Using where
|
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > 100;
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 7 Using where
|
|
DROP TABLE t1;
|
|
#
|
|
# Bug#50104: Partitioned table with just 1 partion works with fk
|
|
#
|
|
CREATE TABLE t2 (
|
|
id INT,
|
|
PRIMARY KEY (id)
|
|
) ENGINE=InnoDB ;
|
|
CREATE TABLE t1 (
|
|
id INT NOT NULL AUTO_INCREMENT,
|
|
parent_id INT DEFAULT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY parent_id (parent_id)
|
|
) ENGINE=InnoDB;
|
|
ALTER TABLE t1 PARTITION BY HASH (id) PARTITIONS 1;
|
|
ALTER TABLE t1 ADD CONSTRAINT test_ibfk_1 FOREIGN KEY (parent_id) REFERENCES t2 (id);
|
|
ERROR HY000: Foreign key clause is not yet supported in conjunction with partitioning
|
|
ALTER TABLE t1 PARTITION BY HASH (id) PARTITIONS 2;
|
|
ALTER TABLE t1 ADD CONSTRAINT test_ibfk_1 FOREIGN KEY (parent_id) REFERENCES t2 (id);
|
|
ERROR HY000: Foreign key clause is not yet supported in conjunction with partitioning
|
|
DROP TABLE t1, t2;
|
|
create table t1 (a varchar(5), b int signed, c varchar(10), d datetime)
|
|
partition by range columns(b,c)
|
|
subpartition by hash(to_seconds(d))
|
|
( partition p0 values less than (2, 'b'),
|
|
partition p1 values less than (4, 'd'),
|
|
partition p2 values less than (10, 'za'));
|
|
insert into t1 values ('a', 3, 'w', '2001-10-27 04:34:00');
|
|
insert into t1 values ('r', 7, 'w', '2001-10-27 05:34:00');
|
|
insert into t1 values ('g', 10, 'w', '2001-10-27 06:34:00');
|
|
update t1 set a = 'c' where a > 'f';
|
|
drop table t1;
|
|
create table t1 (a varchar(5))
|
|
engine=memory
|
|
partition by range columns(a)
|
|
( partition p0 values less than ('m'),
|
|
partition p1 values less than ('za'));
|
|
insert into t1 values ('j');
|
|
update t1 set a = 'z' where (a >= 'j');
|
|
drop table t1;
|
|
create table t1 (a varchar(5))
|
|
engine=myisam
|
|
partition by range columns(a)
|
|
( partition p0 values less than ('m'),
|
|
partition p1 values less than ('za'));
|
|
insert into t1 values ('j');
|
|
update t1 set a = 'z' where (a >= 'j');
|
|
drop table t1;
|
|
create table t1 (a varchar(5))
|
|
engine=innodb
|
|
partition by range columns(a)
|
|
( partition p0 values less than ('m'),
|
|
partition p1 values less than ('za'));
|
|
insert into t1 values ('j');
|
|
update t1 set a = 'z' where (a >= 'j');
|
|
drop table t1;
|
|
create table t1 (a int not null,
|
|
b datetime not null,
|
|
primary key (a,b))
|
|
engine=innodb
|
|
partition by range (to_days(b))
|
|
subpartition by hash (a)
|
|
subpartitions 2
|
|
( partition p0 values less than (to_days('2009-01-01')),
|
|
partition p1 values less than (to_days('2009-02-01')),
|
|
partition p2 values less than (to_days('2009-03-01')),
|
|
partition p3 values less than maxvalue);
|
|
alter table t1 reorganize partition p1,p2 into
|
|
( partition p2 values less than (to_days('2009-03-01')));
|
|
drop table t1;
|
|
CREATE TABLE t1 (id INT PRIMARY KEY, data INT) ENGINE = InnoDB
|
|
PARTITION BY RANGE(id) (
|
|
PARTITION p0 VALUES LESS THAN (5),
|
|
PARTITION p1 VALUES LESS THAN (10),
|
|
PARTITION p2 VALUES LESS THAN MAXVALUE
|
|
);
|
|
INSERT INTO t1 VALUES (1,1), (2,2), (3,3), (4,4), (5,5), (6,6), (7,7), (8,8),
|
|
(9,9), (10,10), (11,11);
|
|
SET @old_tx_isolation := @@session.tx_isolation;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
SET autocommit = 0;
|
|
UPDATE t1 SET DATA = data*2 WHERE id = 3;
|
|
UPDATE t1 SET data = data*2 WHERE data = 2;
|
|
SET @@session.tx_isolation = @old_tx_isolation;
|
|
DROP TABLE t1;
|
|
# Bug#37721, test of ORDER BY on PK and WHERE on INDEX
|
|
CREATE TABLE t1 (
|
|
a INT,
|
|
b INT,
|
|
PRIMARY KEY (a),
|
|
INDEX (b))
|
|
ENGINE InnoDB
|
|
PARTITION BY HASH(a)
|
|
PARTITIONS 3;
|
|
INSERT INTO t1 VALUES (0,0),(4,0),(2,0);
|
|
SELECT a FROM t1 WHERE b = 0 ORDER BY a ASC;
|
|
a
|
|
0
|
|
2
|
|
4
|
|
SELECT a FROM t1 WHERE b = 0 ORDER BY a DESC;
|
|
a
|
|
4
|
|
2
|
|
0
|
|
ALTER TABLE t1 DROP INDEX b;
|
|
SELECT a FROM t1 WHERE b = 0 ORDER BY a ASC;
|
|
a
|
|
0
|
|
2
|
|
4
|
|
SELECT a FROM t1 WHERE b = 0 ORDER BY a DESC;
|
|
a
|
|
4
|
|
2
|
|
0
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (
|
|
a VARCHAR(600),
|
|
b VARCHAR(600),
|
|
PRIMARY KEY (a),
|
|
INDEX (b))
|
|
ENGINE InnoDB
|
|
PARTITION BY KEY(a)
|
|
PARTITIONS 3;
|
|
INSERT INTO t1 VALUES (concat(repeat('MySQL',100),'1'),repeat('0',257));
|
|
INSERT INTO t1 VALUES (concat(repeat('MySQL',100),'3'),repeat('0',257));
|
|
INSERT INTO t1 VALUES (concat(repeat('MySQL',100),'2'),repeat('0',257));
|
|
SELECT right(a,1) FROM t1 WHERE b = repeat('0',257) ORDER BY a ASC;
|
|
right(a,1)
|
|
1
|
|
2
|
|
3
|
|
SELECT right(a,1) FROM t1 WHERE b = repeat('0',257) ORDER BY a DESC;
|
|
right(a,1)
|
|
3
|
|
2
|
|
1
|
|
ALTER TABLE t1 DROP INDEX b;
|
|
SELECT right(a,1) FROM t1 WHERE b = repeat('0',257) ORDER BY a ASC;
|
|
right(a,1)
|
|
1
|
|
2
|
|
3
|
|
SELECT right(a,1) FROM t1 WHERE b = repeat('0',257) ORDER BY a DESC;
|
|
right(a,1)
|
|
3
|
|
2
|
|
1
|
|
DROP TABLE t1;
|
|
# Bug#32948
|
|
CREATE TABLE t1 (c1 INT, PRIMARY KEY (c1)) ENGINE=INNODB;
|
|
CREATE TABLE t2 (c1 INT, PRIMARY KEY (c1),
|
|
FOREIGN KEY (c1) REFERENCES t1 (c1)
|
|
ON DELETE CASCADE)
|
|
ENGINE=INNODB;
|
|
ALTER TABLE t1 PARTITION BY HASH(c1) PARTITIONS 5;
|
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails
|
|
ALTER TABLE t1 ENGINE=MyISAM;
|
|
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails
|
|
DROP TABLE t2;
|
|
DROP TABLE t1;
|
|
create table t1 (a int) engine=innodb partition by hash(a) ;
|
|
show table status like 't1';
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
|
t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
|
drop table t1;
|
|
create table t1 (a int)
|
|
engine = innodb
|
|
partition by key (a);
|
|
show table status;
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
|
t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
|
insert into t1 values (0), (1), (2), (3);
|
|
show table status;
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
|
t1 InnoDB 10 Compact 4 4096 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
|
|
drop table t1;
|
|
create table t1 (a int auto_increment primary key)
|
|
engine = innodb
|
|
partition by key (a);
|
|
show table status;
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
|
t1 InnoDB 10 Compact 2 8192 16384 0 0 # 1 NULL NULL NULL latin1_swedish_ci NULL partitioned
|
|
insert into t1 values (NULL), (NULL), (NULL), (NULL);
|
|
show table status;
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
|
t1 InnoDB 10 Compact 4 4096 16384 0 0 # 5 NULL NULL NULL latin1_swedish_ci NULL partitioned
|
|
insert into t1 values (NULL), (NULL), (NULL), (NULL);
|
|
show table status;
|
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
|
t1 InnoDB 10 Compact 8 2048 16384 0 0 # 9 NULL NULL NULL latin1_swedish_ci NULL partitioned
|
|
drop table t1;
|
|
create table t1 (a int)
|
|
partition by key (a)
|
|
(partition p1 engine = innodb);
|
|
alter table t1 rebuild partition p1;
|
|
alter table t1 rebuild partition p1;
|
|
alter table t1 rebuild partition p1;
|
|
alter table t1 rebuild partition p1;
|
|
alter table t1 rebuild partition p1;
|
|
alter table t1 rebuild partition p1;
|
|
alter table t1 rebuild partition p1;
|
|
drop table t1;
|
|
create table t1 (a date)
|
|
engine = innodb
|
|
partition by range (year(a))
|
|
(partition p0 values less than (2006),
|
|
partition p1 values less than (2007));
|
|
explain partitions select * from t1
|
|
where a between '2006-01-01' and '2007-06-01';
|
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 p1 ALL NULL NULL NULL NULL 2 Using where
|
|
drop table t1;
|
|
create table t1 (a int)
|
|
engine = x
|
|
partition by key (a);
|
|
Warnings:
|
|
Warning 1286 Unknown storage engine 'x'
|
|
Warning 1266 Using storage engine InnoDB for table 't1'
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY KEY (a) */
|
|
drop table t1;
|
|
create table t1 (a int)
|
|
engine = innodb
|
|
partition by list (a)
|
|
(partition p0 values in (0));
|
|
alter table t1 engine = x;
|
|
Warnings:
|
|
Warning 1286 Unknown storage engine 'x'
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY LIST (a)
|
|
(PARTITION p0 VALUES IN (0) ENGINE = InnoDB) */
|
|
drop table t1;
|
|
create table t1
|
|
(
|
|
id int unsigned auto_increment,
|
|
time datetime not null,
|
|
first_name varchar(40),
|
|
last_name varchar(50),
|
|
primary key (id, time),
|
|
index first_index (first_name),
|
|
index last_index (last_name)
|
|
) engine=Innodb partition by range (to_days(time)) (
|
|
partition p1 values less than (to_days('2007-02-07')),
|
|
partition p2 values less than (to_days('2007-02-08')),
|
|
partition p3 values less than MAXVALUE
|
|
);
|
|
insert into t1 (time, first_name, last_name) values ('2007-02-07', 'Q', 'Robert'),
|
|
('2007-02-07', 'Mark', 'Nate'), ('2007-02-07', 'Nate', 'Oscar'),
|
|
('2007-02-07', 'Zack', 'Alice'), ('2007-02-07', 'Jack', 'Kathy'),
|
|
('2007-02-06', 'Alice', 'Alice'), ('2007-02-06', 'Brian', 'Charles'),
|
|
('2007-02-06', 'Charles', 'David'), ('2007-02-06', 'David', 'Eric'),
|
|
('2007-02-07', 'Hector', 'Isaac'), ('2007-02-07', 'Oscar', 'Patricia'),
|
|
('2007-02-07', 'Patricia', 'Q'), ('2007-02-07', 'X', 'Yuri'),
|
|
('2007-02-07', 'Robert', 'Shawn'), ('2007-02-07', 'Kathy', 'Lois'),
|
|
('2007-02-07', 'Eric', 'Francis'), ('2007-02-06', 'Shawn', 'Theron'),
|
|
('2007-02-06', 'U', 'Vincent'), ('2007-02-06', 'Francis', 'George'),
|
|
('2007-02-06', 'George', 'Hector'), ('2007-02-06', 'Vincent', 'Walter'),
|
|
('2007-02-06', 'Walter', 'X'), ('2007-02-07', 'Lois', 'Mark'),
|
|
('2007-02-07', 'Yuri', 'Zack'), ('2007-02-07', 'Isaac', 'Jack'),
|
|
('2007-02-07', 'Sharon', 'Mark'), ('2007-02-07', 'Michael', 'Michelle'),
|
|
('2007-02-07', 'Derick', 'Nathan'), ('2007-02-07', 'Peter', 'Xavier'),
|
|
('2007-02-07', 'Fred', 'Harold'), ('2007-02-07', 'Katherine', 'Lisa'),
|
|
('2007-02-07', 'Tom', 'Rina'), ('2007-02-07', 'Jerry', 'Victor'),
|
|
('2007-02-07', 'Alexander', 'Terry'), ('2007-02-07', 'Justin', 'John'),
|
|
('2007-02-07', 'Greg', 'Ernest'), ('2007-02-07', 'Robert', 'Q'),
|
|
('2007-02-07', 'Nate', 'Mark'), ('2007-02-07', 'Oscar', 'Nate'),
|
|
('2007-02-07', 'Alice', 'Zack'), ('2007-02-07', 'Kathy', 'Jack'),
|
|
('2007-02-06', 'Alice', 'Alice'), ('2007-02-06', 'Charles', 'Brian'),
|
|
('2007-02-06', 'David', 'Charles'), ('2007-02-06', 'Eric', 'David'),
|
|
('2007-02-07', 'Isaac', 'Hector'), ('2007-02-07', 'Patricia', 'Oscar'),
|
|
('2007-02-07', 'Q', 'Patricia'), ('2007-02-07', 'Yuri', 'X'),
|
|
('2007-02-07', 'Shawn', 'Robert'), ('2007-02-07', 'Lois', 'Kathy'),
|
|
('2007-02-07', 'Francis', 'Eric'), ('2007-02-06', 'Theron', 'Shawn'),
|
|
('2007-02-06', 'Vincent', 'U'), ('2007-02-06', 'George', 'Francis'),
|
|
('2007-02-06', 'Hector', 'George'), ('2007-02-06', 'Walter', 'Vincent'),
|
|
('2007-02-06', 'X', 'Walter'), ('2007-02-07', 'Mark', 'Lois'),
|
|
('2007-02-07', 'Zack', 'Yuri'), ('2007-02-07', 'Jack', 'Isaac'),
|
|
('2007-02-07', 'Mark', 'Sharon'), ('2007-02-07', 'Michelle', 'Michael'),
|
|
('2007-02-07', 'Nathan', 'Derick'), ('2007-02-07', 'Xavier', 'Peter'),
|
|
('2007-02-07', 'Harold', 'Fred'), ('2007-02-07', 'Lisa', 'Katherine'),
|
|
('2007-02-07', 'Rina', 'Tom'), ('2007-02-07', 'Victor', 'Jerry'),
|
|
('2007-02-07', 'Terry', 'Alexander'), ('2007-02-07', 'John', 'Justin'),
|
|
('2007-02-07', 'Ernest', 'Greg');
|
|
SELECT * FROM t1 WHERE first_name='Andy' OR last_name='Jake';
|
|
id time first_name last_name
|
|
drop table t1;
|
|
CREATE TABLE t1 (a DOUBLE NOT NULL, KEY(a)) ENGINE=InnoDB
|
|
PARTITION BY KEY(a) PARTITIONS 10;
|
|
INSERT INTO t1 VALUES(1),(2);
|
|
SELECT COUNT(*) FROM t1;
|
|
COUNT(*)
|
|
2
|
|
DROP TABLE t1;
|
|
create table t1 (int_column int, char_column char(5))
|
|
PARTITION BY RANGE (int_column) subpartition by key (char_column) subpartitions 2
|
|
(PARTITION p1 VALUES LESS THAN (5) ENGINE = InnoDB);
|
|
alter table t1
|
|
ENGINE = MyISAM
|
|
PARTITION BY RANGE (int_column)
|
|
subpartition by key (char_column) subpartitions 2
|
|
(PARTITION p1 VALUES LESS THAN (5));
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`int_column` int(11) DEFAULT NULL,
|
|
`char_column` char(5) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
/*!50100 PARTITION BY RANGE (int_column)
|
|
SUBPARTITION BY KEY (char_column)
|
|
SUBPARTITIONS 2
|
|
(PARTITION p1 VALUES LESS THAN (5) ENGINE = MyISAM) */
|
|
drop table t1;
|
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB
|
|
PARTITION BY list(a) (PARTITION p1 VALUES IN (1));
|
|
CREATE INDEX i1 ON t1 (a);
|
|
DROP TABLE t1;
|