mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	on tables with partitions Problem was that the handler function try_semi_consistent_read was not propagated to the innodb handler. Solution was to implement that function in the partitioning handler. mysql-test/r/partition_innodb.result: Bug#40595: Non-matching rows not released with READ-COMMITTED on tables with partitions Updated test result. mysql-test/t/partition_innodb.test: Bug#40595: Non-matching rows not released with READ-COMMITTED on tables with partitions Added test case for bug#40595. Note: the replace_regex is taking long time. I have not found any better regex (it takes time using 'sed' too). sql/ha_partition.cc: Bug#40595: Non-matching rows not released with READ-COMMITTED on tables with partitions Added function to the partitioning handler for handling semi consistent reads (unlock_row was already implemented, and this is needed for unlock_row to work properly in innodb). It uses pruning for optimizing the call. sql/ha_partition.h: Bug#40595: Non-matching rows not released with READ-COMMITTED on tables with partitions Added function to the partitioning handler for handling semi consistent reads (unlock_row was already implemented, and this is needed for unlock_row to work properly in innodb).
		
			
				
	
	
		
			259 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
drop table if exists 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;
 | 
						|
SHOW ENGINE InnoDB STATUS;
 | 
						|
Type	Name	Status
 | 
						|
InnoDB		2 lock struct(s) 1 row lock(s)
 | 
						|
UPDATE t1 SET data = data*2 WHERE data = 2;
 | 
						|
SHOW ENGINE InnoDB STATUS;
 | 
						|
Type	Name	Status
 | 
						|
InnoDB		6 lock struct(s) 2 row lock(s)
 | 
						|
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 table engine 'x'
 | 
						|
Warning	1266	Using storage engine MyISAM for table 't1'
 | 
						|
show create table t1;
 | 
						|
Table	Create Table
 | 
						|
t1	CREATE TABLE `t1` (
 | 
						|
  `a` int(11) DEFAULT NULL
 | 
						|
) ENGINE=MyISAM 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;
 | 
						|
ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL
 | 
						|
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;
 |