mariadb/mysql-test/suite/maria/maria_partition.result
Michael Widenius 5364315229 Fix for MDEV-6493: Assertion `table->file->stats.records > 0 || error' failure, or 'Invalid write' valgrind warnings, or crash on scenario with Aria table, view, LOCK TABLES
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.
2014-07-30 13:27:52 +03:00

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;