mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	The ALTER PARTITION and SELECT seemed to be deadlocked when having innodb_thread_concurrency = 1. Problem was that there was unreleased latches in the ALTER PARTITION thread which was needed by the SELECT thread to be able to continue. Solution was to release the latches by commit before requesting upgrade to exclusive MDL lock. Updated according to reviewers comments (3).
		
			
				
	
	
		
			492 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			492 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
drop table if exists t1, t2;
 | 
						|
#
 | 
						|
# Bug#54747: Deadlock between REORGANIZE PARTITION and
 | 
						|
#            SELECT is not detected
 | 
						|
#
 | 
						|
SET @old_innodb_thread_concurrency:= @@innodb_thread_concurrency;
 | 
						|
SET GLOBAL innodb_thread_concurrency = 1;
 | 
						|
CREATE TABLE t1
 | 
						|
(user_num BIGINT,
 | 
						|
hours SMALLINT,
 | 
						|
KEY user_num (user_num))
 | 
						|
ENGINE = InnoDB   
 | 
						|
PARTITION BY RANGE COLUMNS (hours)
 | 
						|
(PARTITION hour_003 VALUES LESS THAN (3),
 | 
						|
PARTITION hour_004 VALUES LESS THAN (4),
 | 
						|
PARTITION hour_005 VALUES LESS THAN (5),
 | 
						|
PARTITION hour_last VALUES LESS THAN (MAXVALUE));
 | 
						|
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
 | 
						|
BEGIN;
 | 
						|
SELECT COUNT(*) FROM t1;
 | 
						|
COUNT(*)
 | 
						|
5
 | 
						|
# con1
 | 
						|
# SEND a ALTER PARTITION which waits on the ongoing transaction.
 | 
						|
ALTER TABLE t1
 | 
						|
REORGANIZE PARTITION hour_003, hour_004 INTO
 | 
						|
(PARTITION oldest VALUES LESS THAN (4));
 | 
						|
# Connection default wait until the ALTER is in 'waiting for table...'
 | 
						|
# state and then continue the transaction by trying a SELECT
 | 
						|
SELECT COUNT(*) FROM t1;
 | 
						|
COUNT(*)
 | 
						|
5
 | 
						|
COMMIT;
 | 
						|
# con1, reaping ALTER.
 | 
						|
# Disconnecting con1 and switching to default. Cleaning up.
 | 
						|
SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
 | 
						|
DROP TABLE t1;
 | 
						|
#
 | 
						|
# Bug#50418: DROP PARTITION does not interact with transactions
 | 
						|
#
 | 
						|
CREATE TABLE t1 (
 | 
						|
id INT AUTO_INCREMENT NOT NULL,
 | 
						|
name CHAR(50) NOT NULL,
 | 
						|
myDate DATE NOT NULL,
 | 
						|
PRIMARY KEY (id, myDate),
 | 
						|
INDEX idx_date (myDate)
 | 
						|
) ENGINE=InnoDB
 | 
						|
PARTITION BY RANGE ( TO_DAYS(myDate) ) (
 | 
						|
PARTITION p0 VALUES LESS THAN (734028),
 | 
						|
PARTITION p1 VALUES LESS THAN (734029),
 | 
						|
PARTITION p2 VALUES LESS THAN (734030),
 | 
						|
PARTITION p3 VALUES LESS THAN MAXVALUE
 | 
						|
) ;
 | 
						|
INSERT INTO t1 VALUES 
 | 
						|
(NULL, 'Lachlan', '2009-09-13'),
 | 
						|
(NULL, 'Clint', '2009-09-13'),
 | 
						|
(NULL, 'John', '2009-09-14'),
 | 
						|
(NULL, 'Dave', '2009-09-14'),
 | 
						|
(NULL, 'Jeremy', '2009-09-15'),
 | 
						|
(NULL, 'Scott', '2009-09-15'),
 | 
						|
(NULL, 'Jeff', '2009-09-16'),
 | 
						|
(NULL, 'Joe', '2009-09-16');
 | 
						|
SET AUTOCOMMIT=0;
 | 
						|
SELECT * FROM t1 FOR UPDATE;
 | 
						|
id	name	myDate
 | 
						|
1	Lachlan	2009-09-13
 | 
						|
2	Clint	2009-09-13
 | 
						|
3	John	2009-09-14
 | 
						|
4	Dave	2009-09-14
 | 
						|
5	Jeremy	2009-09-15
 | 
						|
6	Scott	2009-09-15
 | 
						|
7	Jeff	2009-09-16
 | 
						|
8	Joe	2009-09-16
 | 
						|
UPDATE t1 SET name = 'Mattias' WHERE id = 7;
 | 
						|
SELECT * FROM t1 WHERE id = 7;
 | 
						|
id	name	myDate
 | 
						|
7	Mattias	2009-09-16
 | 
						|
# Connection con1
 | 
						|
SET lock_wait_timeout = 1;
 | 
						|
# After the patch it will wait and fail on timeout.
 | 
						|
ALTER TABLE t1 DROP PARTITION p3;
 | 
						|
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
 | 
						|
SHOW WARNINGS;
 | 
						|
Level	Code	Message
 | 
						|
Error	1205	Lock wait timeout exceeded; try restarting transaction
 | 
						|
# Connection default
 | 
						|
SELECT * FROM t1;
 | 
						|
id	name	myDate
 | 
						|
1	Lachlan	2009-09-13
 | 
						|
2	Clint	2009-09-13
 | 
						|
3	John	2009-09-14
 | 
						|
4	Dave	2009-09-14
 | 
						|
5	Jeremy	2009-09-15
 | 
						|
6	Scott	2009-09-15
 | 
						|
7	Mattias	2009-09-16
 | 
						|
8	Joe	2009-09-16
 | 
						|
# No changes.
 | 
						|
COMMIT;
 | 
						|
DROP TABLE t1;
 | 
						|
#
 | 
						|
# 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;
 | 
						|
#
 | 
						|
# Bug#54783: optimize table crashes with invalid timestamp default value and NO_ZERO_DATE
 | 
						|
#
 | 
						|
DROP TABLE IF EXISTS t1;
 | 
						|
CREATE TABLE t1 (a INT, b TIMESTAMP DEFAULT '0000-00-00 00:00:00')
 | 
						|
ENGINE=INNODB PARTITION BY LINEAR HASH (a) PARTITIONS 1;
 | 
						|
SET @old_mode = @@sql_mode;
 | 
						|
SET SESSION sql_mode = 'NO_ZERO_DATE';
 | 
						|
OPTIMIZE TABLE t1;
 | 
						|
Table	Op	Msg_type	Msg_text
 | 
						|
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
 | 
						|
test.t1	optimize	error	Invalid default value for 'b'
 | 
						|
test.t1	optimize	status	Operation failed
 | 
						|
Warnings:
 | 
						|
Warning	1265	Data truncated for column 'b' at row 1
 | 
						|
Error	1067	Invalid default value for 'b'
 | 
						|
SET SESSION sql_mode = @old_mode;
 | 
						|
DROP TABLE t1;
 |