mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
aaa9ed3eff
WL#3397 Refactoring storage engine test cases (for falcon) It contains also fixes according to code review. Contents: Testcases which were in history dedicated to InnoDB or MyISAM only. Modifications: 1. Shift the main testing code into include/<testing field>.inc Introduce $variables which can be used to omit tests for features which are not supported by certain storage engines. 2. The storage engine to be tested is assigned within the toplevel script (t/<whatever>_<engine>.test) via variable $engine_type and the the main testing code is sourced from include/<testing field>.inc 3. Some toplevel testscripts have to be renamed to - avoid immediate or future namespace clashes - show via filename which storage engine is tested 4. Minor code cleanup like remove trailing spaces, some additional comments ....
357 lines
12 KiB
PHP
357 lines
12 KiB
PHP
# include/concurrent.inc
|
|
#
|
|
# Concurrent tests for transactional storage engines, mainly in UPDATE's
|
|
# Bug#3300
|
|
# Designed and tested by Sinisa Milivojevic, sinisa@mysql.com
|
|
#
|
|
# two non-interfering UPDATE's not changing result set
|
|
#
|
|
# The variable
|
|
# $engine_type -- storage engine to be tested
|
|
# has to be set before sourcing this script.
|
|
#
|
|
# Last update:
|
|
# 2006-08-02 ML test refactored
|
|
# old name was t/innodb_concurrent.test
|
|
# main code went into include/concurrent.inc
|
|
#
|
|
|
|
connection default;
|
|
eval SET SESSION STORAGE_ENGINE = $engine_type;
|
|
--disable_warnings
|
|
drop table if exists t1;
|
|
--enable_warnings
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
|
|
connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
eval SET SESSION STORAGE_ENGINE = $engine_type;
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",1);
|
|
connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send update t1 set eta=1+get_lock("hello",1)*0 where tipo=11;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
update t1 set eta=2 where tipo=22;
|
|
select release_lock("hello");
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
select * from t1;
|
|
commit;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# two UPDATE's running and one changing result set
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send update t1 set eta=1+get_lock("hello",10)*0 where tipo=1;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
update t1 set tipo=1 where tipo=2;
|
|
select release_lock("hello");
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
select * from t1;
|
|
commit;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
|
|
#
|
|
# One UPDATE and one INSERT .... Monty's test
|
|
#
|
|
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1 (a int not null, b int not null);
|
|
insert into t1 values (1,1),(2,1),(3,1),(4,1);
|
|
select get_lock("hello2",1000);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send update t1 set b=10+get_lock(concat("hello",a),1000)*0 where
|
|
a=2;
|
|
sleep 1;
|
|
connection thread1;
|
|
insert into t1 values (1,1);
|
|
select release_lock("hello2");
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
sleep 1;
|
|
connection thread2;
|
|
reap;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# one UPDATE changing result set and SELECT ... FOR UPDATE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send select * from t1 where tipo=2 FOR UPDATE;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=2;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# one UPDATE not changing result set and SELECT ... FOR UPDATE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send select * from t1 where tipo=2 FOR UPDATE;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
update t1 set tipo=11+get_lock("hello",10)*0 where tipo=22;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
#
|
|
# two SELECT ... FOR UPDATE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send select * from t1 where tipo=2 FOR UPDATE;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
select * from t1 where tipo=1 FOR UPDATE;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
|
|
#
|
|
# one UPDATE changing result set and DELETE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send delete from t1 where tipo=2;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
--error 1205
|
|
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=2;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
drop table t1;
|
|
|
|
|
|
#
|
|
# one UPDATE not changing result set and DELETE
|
|
#
|
|
#connect (thread1, localhost, mysqltest,,);
|
|
connection thread1;
|
|
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
|
|
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
|
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
|
|
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
|
|
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
|
|
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
|
|
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
|
|
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
|
|
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
|
|
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
|
|
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
|
select get_lock("hello",10);
|
|
#connect (thread2, localhost, mysqltest,,);
|
|
connection thread2;
|
|
begin;
|
|
send delete from t1 where tipo=2;
|
|
sleep 1;
|
|
connection thread1;
|
|
begin;
|
|
select release_lock("hello");
|
|
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=22;
|
|
select * from t1;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
send commit;
|
|
connection thread1;
|
|
commit;
|
|
connection thread2;
|
|
reap;
|
|
select * from t1;
|
|
connection thread1;
|
|
select * from t1;
|
|
connection default;
|
|
sleep 1;
|
|
drop table t1;
|
|
disconnect thread1;
|
|
disconnect thread2;
|