mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
5364315229
This bug only happens in case of paritioned tables used in LOCK TABLES and implicit_commit() was called (as part of trying to execute a CREATE TABLE withing lock tables) The problem was that Aria could not move the tables from one transaction to the new one, as thd->open_tables contained a partitioned tables and not an Aria table. Fix: - Store a list of all open tables that are part of a share in share->open_tables - In maria::implict_commit() use transaction->used_tables & share->open_tables to find out which tables was part of the current transaction instead of using thd->open_tables, which may contain partitioned tables. mysql-test/suite/maria/maria_partition.result: Added test case mysql-test/suite/maria/maria_partition.test: Added test case storage/maria/ha_maria.cc: Use trn->used tables and share->open_tables to find out which tables was part of the current transaction instead of using thd->open_tables. storage/maria/ma_close.c: Remove closed table from share->open_list storage/maria/ma_open.c: Add table to share->open_list storage/maria/ma_state.c: Added comment storage/maria/maria_def.h: Added share->open_list, a list of all tables that is using this share.
50 lines
1.5 KiB
Text
50 lines
1.5 KiB
Text
set global storage_engine=aria;
|
|
set session storage_engine=aria;
|
|
set global aria_page_checksum=0;
|
|
drop table if exists t1,t2;
|
|
drop view if exists v1;
|
|
SET SQL_WARNINGS=1;
|
|
create table t1 (s1 int);
|
|
insert into t1 values (1);
|
|
alter table t1 partition by list (s1) (partition p1 values in (2));
|
|
ERROR HY000: Table has no partition for value 1
|
|
drop table t1;
|
|
create table t2(a blob) engine=aria;
|
|
create table t1(a int primary key) engine=aria;
|
|
insert into t2 values ('foo'),('bar');
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
a a
|
|
insert into t1 values (1);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
a a
|
|
insert into t1 values (2);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
a a
|
|
drop table t1,t2;
|
|
create table t2(a blob);
|
|
create table t1(a int primary key) PARTITION BY HASH (a) PARTITIONS 2;
|
|
insert into t2 values ('foo'),('bar');
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
a a
|
|
insert into t1 values (1);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
a a
|
|
insert into t1 values (2);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
a a
|
|
drop table t1,t2;
|
|
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=Aria PARTITION BY KEY() PARTITIONS 2;
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
LOCK TABLE v1 WRITE;
|
|
CREATE TABLE v1 (i INT);
|
|
ERROR HY000: Table 'v1' was not locked with LOCK TABLES
|
|
INSERT INTO v1 VALUES (1);
|
|
UNLOCK TABLES;
|
|
check table t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
SELECT * FROM t1;
|
|
pk
|
|
1
|
|
drop table t1;
|
|
drop view v1;
|