mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 15:24:16 +01:00
Merge moonlight.home:/home/tomash/src/mysql_ab/mysql-5.1
into moonlight.home:/home/tomash/src/mysql_ab/mysql-5.1-bug25211
This commit is contained in:
commit
6b19250759
4 changed files with 205 additions and 70 deletions
39
mysql-test/include/wait_condition.inc
Normal file
39
mysql-test/include/wait_condition.inc
Normal file
|
@ -0,0 +1,39 @@
|
|||
# include/wait_condition.inc
|
||||
#
|
||||
# SUMMARY
|
||||
#
|
||||
# Waits until the passed statement returns true, or the operation
|
||||
# times out.
|
||||
#
|
||||
# USAGE
|
||||
#
|
||||
# let $wait_condition=
|
||||
# SELECT c = 3 FROM t;
|
||||
# --source include/wait_condition.inc
|
||||
#
|
||||
# EXAMPLE
|
||||
# events_bugs.test
|
||||
#
|
||||
|
||||
--disable_query_log
|
||||
|
||||
let $wait_counter= 300;
|
||||
while ($wait_counter)
|
||||
{
|
||||
let $success= `$wait_condition`;
|
||||
if ($success)
|
||||
{
|
||||
let $wait_counter= 0;
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
real_sleep 0.1;
|
||||
dec $wait_counter;
|
||||
}
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
echo Timeout in wait_condition.inc for $wait_condition;
|
||||
}
|
||||
|
||||
--enable_query_log
|
|
@ -1,52 +1,20 @@
|
|||
# include/wait_until_rows_count.inc
|
||||
# inspired by wait_for_slave_status by Matthias Leich
|
||||
#
|
||||
# SUMMARY
|
||||
#
|
||||
# Waits until SELECT count(*)-$count from $table returns zero
|
||||
# Waits until SELECT count(*) = $count from $table returns true, or
|
||||
# the operation times out.
|
||||
#
|
||||
# USAGE
|
||||
#
|
||||
# Set vars like
|
||||
# let $count=11;
|
||||
# let $table=t1;
|
||||
# # invoke the macro
|
||||
# --include wait_until_rows_count.inc
|
||||
# let $count= 5;
|
||||
# let $table= t1;
|
||||
# --source include/wait_until_rows_count.inc
|
||||
#
|
||||
# EXAMPLE
|
||||
# extra/binlog/binlog_insert_delayed.test
|
||||
#
|
||||
#
|
||||
# TODO: generalize up to wait_[until|while] with arbitrary select or even query and
|
||||
# a condition to wait or get awakened
|
||||
# It's impossible to implement such a "most" general macro without
|
||||
# extending mysqltest. Just no way to pass a query as an argument and
|
||||
# evaluate it here, like eval "$quuery". One is bound
|
||||
# to specify it inside of the macro
|
||||
|
||||
--disable_query_log
|
||||
|
||||
let $wait_counter= 300; # max wait in 0.1 seconds
|
||||
while ($wait_counter)
|
||||
{
|
||||
eval select count(*)-$count from $table into @rez;
|
||||
let $rez=`select @rez`;
|
||||
let $success=`SELECT @rez = 0`;
|
||||
let $no_success=1;
|
||||
if ($success)
|
||||
{
|
||||
let $wait_counter= 1; # droppping counter to leave loop
|
||||
let $no_success=0;
|
||||
}
|
||||
if ($no_success)
|
||||
{
|
||||
--sleep 0.1
|
||||
}
|
||||
dec $wait_counter;
|
||||
}
|
||||
|
||||
--enable_query_log
|
||||
if ($no_success)
|
||||
{
|
||||
--die Timeout in wait_until_rows_count.inc, required table never had a prescribed number of rows.
|
||||
}
|
||||
let $wait_condition=
|
||||
select count(*) = $count from $table;
|
||||
--source include/wait_condition.inc
|
||||
|
|
|
@ -49,7 +49,7 @@ begin
|
|||
select get_lock('test_bug16407', 60);
|
||||
drop table "hashed_num";
|
||||
end|
|
||||
"Now if everything is fine the event has compiled and is locked
|
||||
"Now if everything is fine the event has compiled and is locked"
|
||||
select /*1*/ user, host, db, info from information_schema.processlist where command!='Daemon' and (info is null or info not like '%processlist%') order by info;
|
||||
user host db info
|
||||
root localhost events_test select get_lock('test_bug16407', 60)
|
||||
|
@ -239,26 +239,83 @@ insert into t1 values (2);
|
|||
create table t2 (a char(20));
|
||||
insert into t2 values ("e22830_1");
|
||||
create function f22830 () returns int return 5;
|
||||
create event e22830 on schedule every f22830() second do select 123;
|
||||
select get_lock('ee_22830', 60);
|
||||
get_lock('ee_22830', 60)
|
||||
1
|
||||
set global event_scheduler=on;
|
||||
create procedure p22830_wait()
|
||||
begin
|
||||
select get_lock('ee_22830', 60);
|
||||
select release_lock('ee_22830');
|
||||
end|
|
||||
create event e22830 on schedule every f22830() second do
|
||||
begin
|
||||
call p22830_wait();
|
||||
select 123;
|
||||
end|
|
||||
ERROR 42000: This version of MySQL doesn't yet support 'Usage of subqueries or stored function calls as part of this statement'
|
||||
create event e22830_1 on schedule every 1 hour do alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
create event e22830_2 on schedule every 1 hour do alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
create event e22830_3 on schedule every 1 hour do alter event e22830_3 on schedule every f22830() hour;
|
||||
create event e22830_4 on schedule every 1 hour do alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
create event e22830_1 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
end|
|
||||
create event e22830_2 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
end|
|
||||
create event e22830_3 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_3 on schedule every f22830() hour;
|
||||
end|
|
||||
create event e22830_4 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
end|
|
||||
"All events should be blocked in get_lock()"
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
event_name event_definition interval_value interval_field
|
||||
e22830_1 alter event e22830_1 on schedule every (select 8 from dual) hour 1 HOUR
|
||||
e22830_2 alter event e22830_2 on schedule every (select 8 from t1) hour 1 HOUR
|
||||
e22830_3 alter event e22830_3 on schedule every f22830() hour 1 HOUR
|
||||
e22830_4 alter event e22830_4 on schedule every (select f22830() from dual) hour 1 HOUR
|
||||
set global event_scheduler=on;
|
||||
e22830_1 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
end 1 HOUR
|
||||
e22830_2 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
end 1 HOUR
|
||||
e22830_3 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_3 on schedule every f22830() hour;
|
||||
end 1 HOUR
|
||||
e22830_4 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
end 1 HOUR
|
||||
select release_lock('ee_22830');
|
||||
release_lock('ee_22830')
|
||||
1
|
||||
set global event_scheduler=off;
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
event_name event_definition interval_value interval_field
|
||||
e22830_1 alter event e22830_1 on schedule every (select 8 from dual) hour 8 HOUR
|
||||
e22830_2 alter event e22830_2 on schedule every (select 8 from t1) hour 1 HOUR
|
||||
e22830_3 alter event e22830_3 on schedule every f22830() hour 1 HOUR
|
||||
e22830_4 alter event e22830_4 on schedule every (select f22830() from dual) hour 1 HOUR
|
||||
e22830_1 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
end 8 HOUR
|
||||
e22830_2 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
end 1 HOUR
|
||||
e22830_3 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_3 on schedule every f22830() hour;
|
||||
end 1 HOUR
|
||||
e22830_4 begin
|
||||
call p22830_wait();
|
||||
alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
end 1 HOUR
|
||||
drop procedure p22830_wait;
|
||||
drop function f22830;
|
||||
drop event (select a from t2);
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select a from t2)' at line 1
|
||||
|
|
|
@ -78,8 +78,13 @@ begin
|
|||
drop table "hashed_num";
|
||||
end|
|
||||
delimiter ;|
|
||||
--sleep 0.8
|
||||
--echo "Now if everything is fine the event has compiled and is locked
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Now if everything is fine the event has compiled and is locked"
|
||||
select /*1*/ user, host, db, info from information_schema.processlist where command!='Daemon' and (info is null or info not like '%processlist%') order by info;
|
||||
select release_lock('test_bug16407');
|
||||
|
||||
|
@ -127,10 +132,22 @@ begin
|
|||
end|
|
||||
delimiter ;|
|
||||
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
|
||||
--sleep 1
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 3 from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select /*2*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select release_lock('ee_16407_2');
|
||||
--sleep 1.2
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 1 and user = 'event_scheduler' and info is null
|
||||
from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler')
|
||||
and (info is null or info not like '%processlist%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select /*3*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
set global event_scheduler= off;
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
|
@ -150,6 +167,7 @@ set global event_scheduler= on;
|
|||
|
||||
set sql_mode='traditional';
|
||||
delimiter |;
|
||||
# ee_16407_5_pendant() should not insert anything because of invalid date.
|
||||
create procedure ee_16407_5_pendant() begin insert into events_test.events_smode_test values('ee_16407_5','2001-02-29'); end|
|
||||
create procedure ee_16407_6_pendant() begin insert into events_test.events_smode_test values('ee_16407_6','2004-02-29'); end|
|
||||
create event ee_16407_5 on schedule every 60 second do
|
||||
|
@ -165,11 +183,23 @@ begin
|
|||
call events_test.ee_16407_6_pendant();
|
||||
end|
|
||||
delimiter ;|
|
||||
--sleep 1
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 2 from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_5\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Should have 2 locked processes"
|
||||
select /*4*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select release_lock('ee_16407_5');
|
||||
--sleep 1.3
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 1 and user = 'event_scheduler' and info is null
|
||||
from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler')
|
||||
and (info is null or info not like '%processlist%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Should have 0 processes locked"
|
||||
select /*5*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
|
@ -272,17 +302,58 @@ insert into t1 values (2);
|
|||
create table t2 (a char(20));
|
||||
insert into t2 values ("e22830_1");
|
||||
create function f22830 () returns int return 5;
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
create event e22830 on schedule every f22830() second do select 123;
|
||||
create event e22830_1 on schedule every 1 hour do alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
create event e22830_2 on schedule every 1 hour do alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
create event e22830_3 on schedule every 1 hour do alter event e22830_3 on schedule every f22830() hour;
|
||||
create event e22830_4 on schedule every 1 hour do alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
|
||||
select get_lock('ee_22830', 60);
|
||||
set global event_scheduler=on;
|
||||
--sleep 4
|
||||
|
||||
delimiter |;
|
||||
create procedure p22830_wait()
|
||||
begin
|
||||
select get_lock('ee_22830', 60);
|
||||
select release_lock('ee_22830');
|
||||
end|
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
create event e22830 on schedule every f22830() second do
|
||||
begin
|
||||
call p22830_wait();
|
||||
select 123;
|
||||
end|
|
||||
create event e22830_1 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_1 on schedule every (select 8 from dual) hour;
|
||||
end|
|
||||
create event e22830_2 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_2 on schedule every (select 8 from t1) hour;
|
||||
end|
|
||||
create event e22830_3 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_3 on schedule every f22830() hour;
|
||||
end|
|
||||
create event e22830_4 on schedule every 1 hour do
|
||||
begin
|
||||
call p22830_wait();
|
||||
alter event e22830_4 on schedule every (select f22830() from dual) hour;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
--echo "All events should be blocked in get_lock()"
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
|
||||
select release_lock('ee_22830');
|
||||
|
||||
let $wait_condition=
|
||||
select group_concat(interval_value order by interval_value) = '1,1,1,8'
|
||||
from information_schema.events;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
set global event_scheduler=off;
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
drop procedure p22830_wait;
|
||||
drop function f22830;
|
||||
--error ER_PARSE_ERROR
|
||||
drop event (select a from t2);
|
||||
|
|
Loading…
Add table
Reference in a new issue