mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge: 5.1 -> 5.1-rpl
conflicts: Text conflict in client/mysqltest.cc Text conflict in mysql-test/include/wait_until_connected_again.inc Text conflict in mysql-test/lib/mtr_report.pm Text conflict in mysql-test/mysql-test-run.pl Text conflict in mysql-test/r/events_bugs.result Text conflict in mysql-test/r/log_state.result Text conflict in mysql-test/r/myisam_data_pointer_size_func.result Text conflict in mysql-test/r/mysqlcheck.result Text conflict in mysql-test/r/query_cache.result Text conflict in mysql-test/r/status.result Text conflict in mysql-test/suite/binlog/r/binlog_index.result Text conflict in mysql-test/suite/binlog/r/binlog_innodb.result Text conflict in mysql-test/suite/rpl/r/rpl_packet.result Text conflict in mysql-test/suite/rpl/t/rpl_packet.test Text conflict in mysql-test/t/disabled.def Text conflict in mysql-test/t/events_bugs.test Text conflict in mysql-test/t/log_state.test Text conflict in mysql-test/t/myisam_data_pointer_size_func.test Text conflict in mysql-test/t/mysqlcheck.test Text conflict in mysql-test/t/query_cache.test Text conflict in mysql-test/t/rpl_init_slave_func.test Text conflict in mysql-test/t/status.test
This commit is contained in:
31
mysql-test/include/check_events_off.inc
Normal file
31
mysql-test/include/check_events_off.inc
Normal file
@ -0,0 +1,31 @@
|
||||
########## include/check_events_off.inc ####################################
|
||||
# #
|
||||
# Purpose: #
|
||||
# Wait till we can expect that we have no event activity till the scheduler is #
|
||||
# switched on again. #
|
||||
# = There will be no modifications of user tables by existing events #
|
||||
# except they use "INSERT DELAYED" or the server system variable #
|
||||
# "concurrent_inserts" is not switched off. #
|
||||
# Only some storage engines support concurrent_inserts" or "INSERT DELAYED". #
|
||||
# #
|
||||
# Creation: #
|
||||
# 2008-12-19 mleich Implement this check needed for bug fixes in tests #
|
||||
# #
|
||||
################################################################################
|
||||
|
||||
# 1. Check that the server system variable shows the state needed
|
||||
if (`SELECT @@global.event_scheduler <> 'OFF'`)
|
||||
{
|
||||
--echo # Error: We expect here that the event scheduler is switched off.
|
||||
SELECT @@global.event_scheduler;
|
||||
--echo # Thinkable reasons:
|
||||
--echo # 1. SET GLOBAL event_scheduler = OFF had not the expected effect.
|
||||
--echo # 2. Use of the current routine (include/check_events_off.inc)
|
||||
--echo # within the wrong situation
|
||||
--die
|
||||
}
|
||||
# 2. Wait till we have no event_scheduler session within the processlist
|
||||
--source include/no_running_event_scheduler.inc
|
||||
# 3. Wait till we have no event executor sessions within the processlist
|
||||
--source include/no_running_events.inc
|
||||
|
16
mysql-test/include/cleanup_fake_relay_log.inc
Normal file
16
mysql-test/include/cleanup_fake_relay_log.inc
Normal file
@ -0,0 +1,16 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Clean up files create by setup_fake_relay_log.inc.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# See setup_fake_relay_log.inc
|
||||
|
||||
--echo Cleaning up after setup_fake_relay_log.inc
|
||||
|
||||
# Remove files.
|
||||
remove_file $_fake_relay_log;
|
||||
remove_file $_fake_relay_index;
|
||||
--disable_query_log
|
||||
eval SET @@global.relay_log_purge= $_fake_relay_log_purge;
|
||||
--enable_query_log
|
@ -617,10 +617,10 @@ call p_verify_status_increment(0, 0, 0, 0);
|
||||
--echo
|
||||
--echo # No test because of Bug#8729 "rename table fails on temporary table"
|
||||
|
||||
--echo # 24. DDL: TRUNCATE TEMPORARY TABLE, does not start a transaction
|
||||
--echo # 24. DDL: TRUNCATE TEMPORARY TABLE
|
||||
--echo
|
||||
truncate table t2;
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
call p_verify_status_increment(4, 0, 4, 0);
|
||||
commit;
|
||||
--echo # There is nothing left to commit
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
@ -671,8 +671,11 @@ call p_verify_status_increment(2, 2, 2, 2);
|
||||
savepoint a;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
insert t1 set a=4;
|
||||
--echo # Sic: a bug. Binlog did not register itself this time.
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
--echo # Binlog does not register itself this time for other than the 1st
|
||||
--echo # statement of the transaction with MIXED/STATEMENT binlog_format.
|
||||
--echo # It needs registering with the ROW format. Therefore 1,0,2,2 are
|
||||
--echo # the correct arguments to this test after bug#40221 fixed.
|
||||
call p_verify_status_increment(1, 0, 2, 2);
|
||||
release savepoint a;
|
||||
rollback;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
@ -730,7 +733,7 @@ call p_verify_status_increment(1, 0, 1, 0);
|
||||
rename table t4 to t3;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
truncate table t3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
create view v1 as select * from t2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
check table t1;
|
||||
|
@ -11,6 +11,6 @@ eval SET @@global.sort_buffer_size = $save;
|
||||
--enable_query_log
|
||||
if (!$mach32)
|
||||
{
|
||||
skip Need a 32 bit machine;
|
||||
skip Need a 32 bit machine/binary;
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,6 @@ eval SET @@session.sort_buffer_size = $save;
|
||||
--enable_query_log
|
||||
if (!$mach64)
|
||||
{
|
||||
skip Need a 64 bit machine;
|
||||
skip Need a 64 binary ;
|
||||
}
|
||||
|
||||
|
16
mysql-test/include/have_simple_parser.inc
Normal file
16
mysql-test/include/have_simple_parser.inc
Normal file
@ -0,0 +1,16 @@
|
||||
#
|
||||
# Check if server has support for loading udf's
|
||||
# i.e it will support dlopen
|
||||
#
|
||||
--require r/have_dynamic_loading.require
|
||||
disable_query_log;
|
||||
show variables like 'have_dynamic_loading';
|
||||
enable_query_log;
|
||||
|
||||
#
|
||||
# Check if the variable SIMPLE_PARSER is set
|
||||
#
|
||||
--require r/have_simple_parser.require
|
||||
disable_query_log;
|
||||
eval select LENGTH('$SIMPLE_PARSER') > 0 as 'have_simple_parser';
|
||||
enable_query_log;
|
@ -501,4 +501,30 @@ SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#40974: Incorrect query results when using clause evaluated using range check
|
||||
--echo #
|
||||
create table t0 (a int);
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1),(2);
|
||||
create table t2(a int, b int);
|
||||
insert into t2 values (1,1), (2, 1000);
|
||||
create table t3 (a int, b int, filler char(100), key(a), key(b));
|
||||
|
||||
insert into t3 select 1000, 1000,'filler' from t0 A, t0 B, t0 C;
|
||||
insert into t3 values (1,1,'data');
|
||||
insert into t3 values (1,1,'data');
|
||||
-- echo The plan should be ALL/ALL/ALL(Range checked for each record (index map: 0x3)
|
||||
explain select * from t1
|
||||
where exists (select 1 from t2, t3
|
||||
where t2.a=t1.a and (t3.a=t2.b or t3.b=t2.b or t3.b=t2.b+1));
|
||||
|
||||
select * from t1
|
||||
where exists (select 1 from t2, t3
|
||||
where t2.a=t1.a and (t3.a=t2.b or t3.b=t2.b or t3.b=t2.b+1));
|
||||
|
||||
drop table t0, t1, t2, t3;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -9,7 +9,6 @@ SET @min_flush_time = 0;
|
||||
#SET @max_flush_time = 0;
|
||||
|
||||
SET @default_key_buffer_size = 131072;
|
||||
SET @min_key_buffer_size = 36;
|
||||
|
||||
#SET @default_join_buffer_size = 131072;
|
||||
#SET @min_join_buffer_size = 8200;
|
||||
|
23
mysql-test/include/no_running_event_scheduler.inc
Normal file
23
mysql-test/include/no_running_event_scheduler.inc
Normal file
@ -0,0 +1,23 @@
|
||||
########## include/no_running_event_scheduler.inc ##########################
|
||||
# #
|
||||
# Wait till the event scheduler disappeared from processlist. #
|
||||
# #
|
||||
# The characteristics of the event_scheduler entry within the processlist is #
|
||||
# user = 'event_scheduler' and command = 'Daemon'. I am not 100% sure if #
|
||||
# ther is no short phase with command <> 'Daemon'. #
|
||||
# A query with WHERE user = 'event_scheduler' only will also catch events in #
|
||||
# startup phase. This is no problem since this phase is very short. #
|
||||
# #
|
||||
# A wait_timeout of >= 3 seconds was within experiments sufficient even on a #
|
||||
# testing box with heavy parallel load. Therefore 5 seconds should be enough. #
|
||||
# #
|
||||
# Creation: #
|
||||
# 2008-12-19 mleich Implement this check needed for test bug fixes #
|
||||
# #
|
||||
################################################################################
|
||||
|
||||
let $wait_timeout= 5;
|
||||
let $wait_condition=
|
||||
SELECT COUNT(*) = 0 FROM information_schema.processlist
|
||||
WHERE user = 'event_scheduler';
|
||||
--source include/wait_condition.inc
|
25
mysql-test/include/no_running_events.inc
Normal file
25
mysql-test/include/no_running_events.inc
Normal file
@ -0,0 +1,25 @@
|
||||
########## include/no_running_events.inc ###################################
|
||||
# #
|
||||
# Wait till all event executors have finished their work. #
|
||||
# #
|
||||
# Different event executors share the characteristics that their entry within #
|
||||
# processlist contains command = 'Connect'. #
|
||||
# Of course the corresponding query will also catch other connections being #
|
||||
# within the connect phase. This is no problem since the connect phase is #
|
||||
# usually very short. #
|
||||
# #
|
||||
# A wait_timeout of >= 3 seconds was during experiments in case of "simple" #
|
||||
# SQL commands sufficient even on a testing box with heavy parallel load. #
|
||||
# "simple" = no sleeps, no long running commands, no waiting for lock ... #
|
||||
# We use here the default of 30 seconds because this wastes some time only in #
|
||||
# case of unexpected situations. #
|
||||
# #
|
||||
# Creation: #
|
||||
# 2008-12-19 mleich Implement this check needed for test bug fixes #
|
||||
# #
|
||||
################################################################################
|
||||
|
||||
let $wait_condition=
|
||||
SELECT COUNT(*) = 0 FROM information_schema.processlist
|
||||
WHERE command = 'Connect';
|
||||
--source include/wait_condition.inc
|
30
mysql-test/include/running_event_scheduler.inc
Normal file
30
mysql-test/include/running_event_scheduler.inc
Normal file
@ -0,0 +1,30 @@
|
||||
############# include/running_event_scheduler.inc ##########################
|
||||
# #
|
||||
# Wait till the event scheduler reached its final state within the processlist.#
|
||||
# #
|
||||
# The characteristics of the event_scheduler entry within the processlist is #
|
||||
# user = 'event_scheduler' and command = 'Daemon'. I am not 100% sure if #
|
||||
# ther is no short phase with command <> 'Daemon'. #
|
||||
# A query with WHERE user = 'event_scheduler' only will also catch events in #
|
||||
# startup phase. #
|
||||
# #
|
||||
# Creation: #
|
||||
# 2008-12-19 mleich Implement this check needed for test bug fixes #
|
||||
# #
|
||||
################################################################################
|
||||
|
||||
# 1. Check that the server system variable shows the state needed
|
||||
if (`SELECT @@global.event_scheduler <> 'ON'`)
|
||||
{
|
||||
--echo # Error: We expect here that the event scheduler is switched on.
|
||||
SELECT @@global.event_scheduler;
|
||||
--echo # Thinkable reasons:
|
||||
--echo # 1. SET GLOBAL event_scheduler = ON had not the expected effect.
|
||||
--echo # 2. Use of the current routine (include/running_event_scheduler.inc)
|
||||
--echo # within the wrong situation
|
||||
--die
|
||||
}
|
||||
let $wait_condition=
|
||||
SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||
WHERE user = 'event_scheduler' AND command = 'Daemon';
|
||||
--source include/wait_condition.inc
|
78
mysql-test/include/setup_fake_relay_log.inc
Normal file
78
mysql-test/include/setup_fake_relay_log.inc
Normal file
@ -0,0 +1,78 @@
|
||||
# ==== Purpose ====
|
||||
#
|
||||
# Setup replication from an existing relay log in the current
|
||||
# connection.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# Make sure the slave is not running and issue:
|
||||
#
|
||||
# let $fake_relay_log= /path/to/fake-relay-log-file.000001
|
||||
# source include/setup_fake_relay_log.inc;
|
||||
# START SLAVE SQL_THREAD; # setup_fake_relay_log doesn't start slave
|
||||
# ...
|
||||
# source include/cleanup_fake_relay_log.inc
|
||||
#
|
||||
# You must run the server with --relay-log=FILE. You probably want to
|
||||
# run with --replicate-same-server-id too.
|
||||
#
|
||||
# ==== Implementation ====
|
||||
#
|
||||
# First makes a sanity check, ensuring that the slave threads are not
|
||||
# running. Then copies the $fake_relay_log to RELAY_BIN-fake.000001,
|
||||
# where RELAY_BIN is the basename of the relay log, and updates
|
||||
# RELAY_BIN.index. Finally issues CHANGE MASTER so that it uses the
|
||||
# given files.
|
||||
#
|
||||
# ==== Side effects ====
|
||||
#
|
||||
# Creates a binlog file and a binlog index file, and sets
|
||||
# @@global.relay_log_purge=1. All this is restored when you call
|
||||
# cleanup_fake_relay_log.inc.
|
||||
#
|
||||
# Enables the query log.
|
||||
|
||||
|
||||
--disable_query_log
|
||||
|
||||
# Print message.
|
||||
let $_fake_relay_log_printable= `SELECT REPLACE('$fake_relay_log', '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`;
|
||||
--echo Setting up fake replication from $_fake_relay_log_printable
|
||||
|
||||
# Sanity check.
|
||||
let $_sql_running= query_get_value(SHOW SLAVE STATUS, Slave_SQL_Running, 1);
|
||||
let $_io_running= query_get_value(SHOW SLAVE STATUS, Slave_IO_Running, 1);
|
||||
if (`SELECT "$_sql_running" = "Yes" OR "$_io_running" = "Yes"`) {
|
||||
--echo Error: Slave was running when test case sourced
|
||||
--echo include/setup_fake_replication.inc
|
||||
--echo Slave_IO_Running = $_io_running; Slave_SQL_Running = $_sql_running
|
||||
--echo Printing some debug info:
|
||||
SHOW SLAVE STATUS;
|
||||
SHOW MASTER STATUS;
|
||||
SHOW BINLOG EVENTS;
|
||||
SHOW PROCESSLIST;
|
||||
}
|
||||
|
||||
# Read server variables.
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
let $_fake_filename= query_get_value(SHOW VARIABLES LIKE 'relay_log', Value, 1);
|
||||
if (`SELECT '$_fake_filename' = ''`) {
|
||||
--echo Badly written test case: relay_log variable is empty. Please use the
|
||||
--echo server option --relay-log=FILE.
|
||||
}
|
||||
let $_fake_relay_log= $MYSQLD_DATADIR/$_fake_filename-fake.000001;
|
||||
let $_fake_relay_index= $MYSQLD_DATADIR/$_fake_filename.index;
|
||||
# Need to restore relay_log_purge in cleanup_fake_relay_log.inc, since
|
||||
# CHANGE MASTER modifies it (see the manual for CHANGE MASTER).
|
||||
let $_fake_relay_log_purge= `SELECT @@global.relay_log_purge`;
|
||||
|
||||
# Create relay log file.
|
||||
copy_file $fake_relay_log $_fake_relay_log;
|
||||
|
||||
# Create relay log index.
|
||||
eval SELECT '$_fake_relay_log' INTO OUTFILE '$_fake_relay_index';
|
||||
|
||||
# Setup replication from existing relay log.
|
||||
eval CHANGE MASTER TO MASTER_HOST='dummy.localdomain', RELAY_LOG_FILE='$_fake_relay_log', RELAY_LOG_POS=4;
|
||||
|
||||
--enable_query_log
|
62
mysql-test/include/wait_condition_sp.inc
Normal file
62
mysql-test/include/wait_condition_sp.inc
Normal file
@ -0,0 +1,62 @@
|
||||
# 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
|
||||
#
|
||||
# OR
|
||||
#
|
||||
# let $wait_timeout= 60; # Override default 30 seconds with 60.
|
||||
# let $wait_condition=
|
||||
# SELECT c = 3 FROM t;
|
||||
# --source include/wait_condition.inc
|
||||
# --echo Executed the test condition $wait_condition_reps times
|
||||
#
|
||||
# EXAMPLE
|
||||
# events_bugs.test, events_time_zone.test
|
||||
#
|
||||
|
||||
--disable_query_log
|
||||
|
||||
let $wait_counter= 300;
|
||||
if ($wait_timeout)
|
||||
{
|
||||
let $wait_counter= `SELECT $wait_timeout * 10`;
|
||||
}
|
||||
# Reset $wait_timeout so that its value won't be used on subsequent
|
||||
# calls, and default will be used instead.
|
||||
let $wait_timeout= 0;
|
||||
|
||||
# Keep track of how many times the wait condition is tested
|
||||
# This is used by some tests (e.g., main.status)
|
||||
let $wait_condition_reps= 0;
|
||||
while ($wait_counter)
|
||||
{
|
||||
let $success= `$wait_condition`;
|
||||
inc $wait_condition_reps;
|
||||
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;
|
||||
show master status;
|
||||
show slave status;
|
||||
}
|
||||
|
||||
--enable_query_log
|
||||
|
@ -9,7 +9,6 @@ SET @min_flush_time = 0;
|
||||
#SET @max_flush_time = 0;
|
||||
|
||||
SET @default_key_buffer_size= 131072;
|
||||
SET @min_key_buffer_size= 8;
|
||||
|
||||
#SET @default_join_buffer_size = 131072;
|
||||
#SET @min_join_buffer_size = 8200;
|
||||
|
Reference in New Issue
Block a user