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.
80 lines
2.2 KiB
Text
80 lines
2.2 KiB
Text
# Aria tests which require partitioning enabled
|
|
|
|
--source include/have_partition.inc
|
|
-- source include/have_maria.inc
|
|
|
|
let $default_engine=`select @@global.storage_engine`;
|
|
let $default_checksum=`select @@global.aria_page_checksum`;
|
|
set global storage_engine=aria;
|
|
set session storage_engine=aria;
|
|
set global aria_page_checksum=0;
|
|
|
|
# Initialise
|
|
--disable_warnings
|
|
drop table if exists t1,t2;
|
|
drop view if exists v1;
|
|
--enable_warnings
|
|
SET SQL_WARNINGS=1;
|
|
|
|
#
|
|
# Bug #39227 Aria: crash with ALTER TABLE PARTITION
|
|
#
|
|
|
|
create table t1 (s1 int);
|
|
insert into t1 values (1);
|
|
--error ER_NO_PARTITION_FOR_GIVEN_VALUE
|
|
alter table t1 partition by list (s1) (partition p1 values in (2));
|
|
drop table t1;
|
|
|
|
#
|
|
# Test outer join const propagation
|
|
#
|
|
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';
|
|
insert into t1 values (1);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
insert into t1 values (2);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
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';
|
|
insert into t1 values (1);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
insert into t1 values (2);
|
|
select * from t2 left join t1 on (t2.a=t1.a) where t2.a='bbb';
|
|
drop table t1,t2;
|
|
|
|
#
|
|
# 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 #
|
|
#
|
|
|
|
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;
|
|
--error 1100
|
|
CREATE TABLE v1 (i INT);
|
|
INSERT INTO v1 VALUES (1);
|
|
UNLOCK TABLES;
|
|
check table t1;
|
|
|
|
SELECT * FROM t1;
|
|
|
|
drop table t1;
|
|
drop view v1;
|
|
|
|
# Set defaults back
|
|
--disable_result_log
|
|
--disable_query_log
|
|
eval set global storage_engine=$default_engine, aria_page_checksum=$default_checksum;
|
|
set global aria_log_file_size=default;
|
|
--enable_result_log
|
|
--enable_query_log
|