2005-07-29 14:14:21 +02:00
|
|
|
-- source include/have_query_cache.inc
|
|
|
|
-- source include/not_embedded.inc
|
|
|
|
|
2009-02-05 21:47:23 +01:00
|
|
|
# Save the initial number of concurrent sessions
|
|
|
|
--source include/count_sessions.inc
|
|
|
|
|
2005-07-29 14:14:21 +02:00
|
|
|
#
|
|
|
|
# Tests with query cache
|
|
|
|
#
|
2015-08-11 18:45:38 +02:00
|
|
|
set @sql_mode_save=@@global.sql_mode;
|
|
|
|
set @query_cache_type_save=@@global.query_cache_type;
|
|
|
|
set @query_cache_size_save=@@global.query_cache_size;
|
|
|
|
|
|
|
|
set GLOBAL sql_mode="";
|
|
|
|
set LOCAL sql_mode="";
|
2005-07-29 14:14:21 +02:00
|
|
|
|
|
|
|
# Reset query cache variables.
|
|
|
|
|
|
|
|
flush query cache; # This crashed in some versions
|
|
|
|
flush query cache; # This crashed in some versions
|
|
|
|
reset query cache;
|
|
|
|
flush status;
|
|
|
|
--disable_warnings
|
|
|
|
drop table if exists t1, t2, t3, t11, t21;
|
|
|
|
--enable_warnings
|
|
|
|
#
|
|
|
|
# FLUSH QUERY CACHE
|
|
|
|
#
|
|
|
|
create table t1 (a int not null);
|
|
|
|
insert into t1 values (1),(2),(3);
|
|
|
|
create table t2 (a int not null);
|
|
|
|
insert into t2 values (1),(2),(3);
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
insert into t1 values (4);
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
flush query cache;
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
drop table t1, t2;
|
|
|
|
# With join results...
|
|
|
|
create table t1 (a text not null);
|
|
|
|
create table t11 (a text not null);
|
|
|
|
create table t2 (a text not null);
|
|
|
|
create table t21 (a text not null);
|
|
|
|
create table t3 (a text not null);
|
|
|
|
insert into t1 values("1111111111111111111111111111111111111111111111111111");
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
# t11 and t21 must be over 4Kb (QUERY_CACHE_MIN_RESULT_DATA_SIZE)
|
|
|
|
insert into t11 select * from t1;
|
|
|
|
insert into t21 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
insert into t1 select * from t2;
|
|
|
|
#results of t3 must be > 0.5Mb
|
|
|
|
insert into t3 select * from t1;
|
|
|
|
insert into t3 select * from t2;
|
|
|
|
insert into t3 select * from t1;
|
|
|
|
disable_result_log;
|
|
|
|
select * from t11;
|
|
|
|
select * from t21;
|
|
|
|
enable_result_log;
|
|
|
|
show status like "Qcache_total_blocks";
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
disable_result_log;
|
|
|
|
insert into t11 values("");
|
|
|
|
select * from t3;
|
|
|
|
enable_result_log;
|
|
|
|
show status like "Qcache_total_blocks";
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
flush query cache;
|
|
|
|
show status like "Qcache_total_blocks";
|
|
|
|
show status like "Qcache_free_blocks";
|
|
|
|
drop table t1, t2, t3, t11, t21;
|
|
|
|
|
2005-08-11 12:07:08 +02:00
|
|
|
#
|
2009-02-05 21:47:23 +01:00
|
|
|
# do not use QC if tables locked (Bug#12385)
|
2005-08-11 12:07:08 +02:00
|
|
|
#
|
2006-12-19 15:10:15 +01:00
|
|
|
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
2005-08-11 12:07:08 +02:00
|
|
|
connection root;
|
|
|
|
CREATE TABLE t1 ( a INT NOT NULL PRIMARY KEY AUTO_INCREMENT ) ENGINE =
|
|
|
|
MyISAM;
|
|
|
|
LOCK TABLE t1 READ LOCAL;
|
2006-12-19 15:10:15 +01:00
|
|
|
connect (root2,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
2005-08-11 12:07:08 +02:00
|
|
|
connection root2;
|
|
|
|
INSERT INTO t1 VALUES (), (), ();
|
|
|
|
connection root;
|
|
|
|
SELECT * FROM t1;
|
|
|
|
connection root2;
|
|
|
|
SELECT * FROM t1;
|
|
|
|
connection root;
|
|
|
|
SELECT * FROM t1;
|
Backport of:
------------------------------------------------------------
revno: 2476.784.3
committer: davi@moksha.local
timestamp: Tue 2007-10-02 21:27:31 -0300
message:
Bug#25858 Some DROP TABLE under LOCK TABLES can cause deadlocks
When a client (connection) holds a lock on a table and attempts to
drop (obtain a exclusive lock) on a second table that is already
held by a second client and the second client then attempts to
drop the table that is held by the first client, leads to a
circular wait deadlock. This scenario is very similar to trying to
drop (or rename) a table while holding read locks and are
correctly forbidden.
The solution is to allow a drop table operation to continue only
if the table being dropped is write (exclusively) locked, or if
the table is temporary, or if the client is not holding any
locks. Using this scheme prevents the creation of a circular
chain in which each client is waiting for one table that the
next client in the chain is holding.
This is incompatible change, as can be seen by number of tests
cases that needed to be fixed, but is consistent with respect to
behavior of the different scenarios in which the circular wait
might happen.
mysql-test/r/drop.result:
Test case result for Bug#25858
mysql-test/r/group_by.result:
Fix test case result wrt drop table under lock tables -- unlock tables
before dropping table.
mysql-test/r/insert_notembedded.result:
Fix test case result wrt drop table under lock tables -- unlock tables
before dropping table
mysql-test/r/lock.result:
Fix test case result wrt drop table under lock tables -- unlock tables
before dropping table.
mysql-test/r/lock_multi.result:
Fix test case result wrt drop table under lock tables -- unlock tables
before dropping table.
mysql-test/r/myisam.result:
Fix test case result wrt drop table under lock tables -- unlock tables
before dropping table.
mysql-test/r/view.result:
Fix test case result wrt drop table under lock tables -- unlock tables
before dropping table.
mysql-test/t/drop.test:
Add test case for Bug#25858
mysql-test/t/group_by.test:
Fix test case: unlock tables in preparation for a drop table. In some
circumstances, dropping tables while holding locks leads to a deadlock.
mysql-test/t/insert_notembedded.test:
Fix test case: unlock tables in preparation for a drop table. In some
circumstances, dropping tables while holding locks leads to a deadlock.
mysql-test/t/lock.test:
Fix test case: unlock tables in preparation for a drop table. In some
circumstances, dropping tables while holding locks leads to a deadlock.
mysql-test/t/lock_multi.test:
Fix test case: unlock tables in preparation for a drop table. In some
circumstances, dropping tables while holding locks leads to a deadlock.
mysql-test/t/myisam.test:
Fix test case: unlock tables in preparation for a drop table. In some
circumstances, dropping tables while holding locks leads to a deadlock.
mysql-test/t/query_cache_notembedded.test:
Fix test case: unlock tables in preparation for a drop table. In some
circumstances, dropping tables while holding locks leads to a deadlock.
mysql-test/t/view.test:
Fix test case: unlock tables in preparation for a drop table. In some
circumstances, dropping tables while holding locks leads to a deadlock.
sql/lock.cc:
When trying to obtain a name lock under lock tables, ensure that the table is properly exclusively locked and fail otherwise.
2009-11-20 20:51:12 +01:00
|
|
|
UNLOCK TABLES;
|
2005-08-11 12:07:08 +02:00
|
|
|
drop table t1;
|
2009-02-05 21:47:23 +01:00
|
|
|
connection default;
|
|
|
|
disconnect root;
|
|
|
|
disconnect root2;
|
2005-08-11 12:07:08 +02:00
|
|
|
|
2006-02-24 17:34:15 +01:00
|
|
|
#
|
2009-02-05 21:47:23 +01:00
|
|
|
# query in QC from normal execution and SP (Bug#6897)
|
|
|
|
# improved to also test Bug#3583 and Bug#12990
|
2006-02-24 17:34:15 +01:00
|
|
|
#
|
|
|
|
flush query cache;
|
|
|
|
reset query cache;
|
|
|
|
flush status;
|
|
|
|
delimiter //;
|
|
|
|
create table t1 (s1 int)//
|
|
|
|
create procedure f1 () begin
|
|
|
|
select sql_cache * from t1;
|
|
|
|
select sql_cache * from t1;
|
|
|
|
select sql_cache * from t1;
|
|
|
|
end;//
|
|
|
|
create procedure f2 () begin
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
select sql_cache * from t1;
|
|
|
|
end;//
|
|
|
|
create procedure f3 () begin
|
|
|
|
select sql_cache * from t1;
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
end;//
|
|
|
|
create procedure f4 () begin
|
|
|
|
select sql_cache * from t1;
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
select sql_cache * from t1;
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
end;//
|
|
|
|
delimiter ;//
|
|
|
|
call f1();
|
|
|
|
--replace_result 1 3
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
call f1();
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
call f1();
|
|
|
|
select sql_cache * from t1;
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
insert into t1 values (1);
|
|
|
|
select sql_cache * from t1;
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
call f1();
|
|
|
|
call f1();
|
|
|
|
select sql_cache * from t1;
|
|
|
|
show status like "Qcache_queries_in_cache";
|
|
|
|
show status like "Qcache_inserts";
|
|
|
|
show status like "Qcache_hits";
|
|
|
|
flush query cache;
|
|
|
|
reset query cache;
|
|
|
|
flush status;
|
|
|
|
select sql_cache * from t1;
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
call f1();
|
|
|
|
call f2();
|
|
|
|
call f3();
|
|
|
|
call f4();
|
|
|
|
call f4();
|
|
|
|
call f3();
|
|
|
|
call f2();
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
insert into t1 values (2);
|
|
|
|
call f1();
|
|
|
|
select sql_cache * from t1 where s1=1;
|
|
|
|
select sql_cache * from t1;
|
|
|
|
call f1();
|
|
|
|
call f3();
|
|
|
|
call f3();
|
|
|
|
call f1();
|
|
|
|
|
|
|
|
drop procedure f1;
|
|
|
|
drop procedure f2;
|
|
|
|
drop procedure f3;
|
|
|
|
drop procedure f4;
|
|
|
|
drop table t1;
|
|
|
|
|
2006-03-15 18:15:52 +01:00
|
|
|
#
|
2009-02-05 21:47:23 +01:00
|
|
|
# Bug#14767 INSERT in SF + concurrent SELECT with query cache
|
2006-03-15 18:15:52 +01:00
|
|
|
#
|
BUG#37975: wait_for_slave_* should increase the timeout
Problem 1: tests often fail in pushbuild with a timeout when waiting
for the slave to start/stop/receive error.
Fix 1: Updated the wait_for_slave_* macros in the following way:
- The timeout is increased by a factor ten
- Refactored the macros so that wait_for_slave_param does the work for
the other macros.
Problem 2: Tests are often incorrectly written, lacking a
source include/wait_for_slave_to_[start|stop].inc.
Fix 2: Improved the chance to get it right by adding
include/start_slave.inc and include/stop_slave.inc, and updated tests
to use these.
Problem 3: The the built-in test language command
wait_for_slave_to_stop is a misnomer (does not wait for the slave io
thread) and does not give as much debug info in case of failure as
the otherwise equivalent macro
source include/wait_for_slave_sql_to_stop.inc
Fix 3: Replaced all calls to the built-in command by a call to the
macro.
Problem 4: Some, but not all, of the wait_for_slave_* macros had an
implicit connection slave. This made some tests confusing to read,
and made it more difficult to use the macro in circular replication
scenarios, where the connection named master needs to wait.
Fix 4: Removed the implicit connection slave from all
wait_for_slave_* macros, and updated tests to use an explicit
connection slave where necessary.
Problem 5: The macros wait_slave_status.inc and wait_show_pattern.inc
were unused. Moreover, using them is difficult and error-prone.
Fix 5: remove these macros.
Problem 6: log_bin_trust_function_creators_basic failed when running
tests because it assumed @@global.log_bin_trust_function_creators=1,
and some tests modified this variable without resetting it to its
original value.
Fix 6: All tests that use this variable have been updated so that
they reset the value at end of test.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
Added connection slave since includ/wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/extra/rpl_tests/rpl_log.test:
Replaced start slave+wait_slave_status by start_slave.inc
mysql-test/include/reset_master_and_slave.inc:
replaced start/stop slave by start_slave.inc/stop_slave.inc
mysql-test/include/sync_slave_io_with_master.inc:
Improved comments and error message.
mysql-test/include/wait_for_slave_io_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_param.inc:
- Improved usage instructions
- Added more debug info in case of timeout
- Added parameters $slave_param_comparison, $slave_timeout,
$slave_keep_connection, $slave_error_message
mysql-test/include/wait_for_slave_sql_error.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_show_pattern.inc:
Removed unused (and error-prone) file
mysql-test/include/wait_slave_status.inc:
Removed unused (and error-prone) file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_bug26395.test:
Replace stop slave by stop_slave.inc
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
Replace start/stop slave by start_slave.inc/stop_slave.inc.
Replace wait_for_slave_param by wait_for_slave_sql_to_stop.inc.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
Replace wait_slave_status by start_slave.inc
mysql-test/suite/rpl/t/rpl_idempotency.test:
Added connection slave since wait_for_slave_sql_to_stop.inc does not
do that any more.
mysql-test/suite/rpl/t/rpl_incident.test:
Replaced wait_for_slave_to_stop by wait_for_slave_sql_to_stop.inc
mysql-test/suite/rpl/t/rpl_init_slave.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_log_pos.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced wait_for_slave_param by other wait_for_slave_* macros.
mysql-test/suite/rpl/t/rpl_packet.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_server_id1.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_status.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_sp.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_stm_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
Replaced start slave by start_slave.inc.
Added explicit connection slave since wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/t/disabled.def:
Disabled failing test.
mysql-test/t/func_time.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/innodb_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/log_bin_trust_function_creators_func.test:
Restore @@global.log_bin_trust_function_creators at end of test.
Clean up at end of test by dropping the created user.
mysql-test/t/query_cache.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/query_cache_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/rpl_init_slave_func.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/t/timezone2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
2008-07-10 18:09:39 +02:00
|
|
|
connection default;
|
|
|
|
SET @old_log_bin_trust_function_creators= @@global.log_bin_trust_function_creators;
|
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Fix tests for new behaviour: an error is thrown if a NON DETERMINISTIC
stored function (SF) is called during statement-based replication (SBR).
mysql-test/r/func_time.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/r/gis.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Mark function as DETERMINISTIC so it can be called with no error while
doing statement-based replication (SBR).
mysql-test/r/grant2.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/r/innodb_notembedded.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/r/ps.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Mark function as DETERMINISTIC so it can be called with no error while
doing statement-based replication (SBR).
mysql-test/r/query_cache.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/r/query_cache_notembedded.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/r/rpl_sp.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Move test for SF-calls in different replication modes to its own file, rpl_sf.
mysql-test/r/rpl_sp_effects.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/r/sp.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Mark function as DETERMINISTIC so it can be called with no error while
doing statement-based replication (SBR).
mysql-test/r/timezone2.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/func_time.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/gis.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Mark function as DETERMINISTIC so it can be called with no error while
doing statement-based replication (SBR).
mysql-test/t/grant2.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/innodb_notembedded.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/ps.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/query_cache.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/query_cache_notembedded.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/rpl_sp.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/rpl_sp_effects.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
mysql-test/t/sp.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Mark function as DETERMINISTIC so it can be called with no error while
doing statement-based replication (SBR).
mysql-test/t/timezone2.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Modify test that contains non-deterministic functions so it can still be
called with no error while doing statement-based replication (SBR).
sql/item_func.cc:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
If 'log_bin_trust_function_creators' variable is set, don't throw an error
on calling a non-deterministc function in statement-based replication (SBR).
sql/sql_parse.cc:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Do not throw an error on calling a NON DETERMINISTIC stored procedure (SP)
while doing statement-based replication (SBR), as the routine body is
executed statement-by-statement.
mysql-test/r/rpl_sf.result:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Test for stored function (SF) calls in different replication modes.
NON DETERMINISTIC SFs are not allowed while doing
statement-based replication (SBR).
mysql-test/t/rpl_sf.test:
Bug#16456 RBR: rpl_sp.test expects query to fail, but passes in RBR
Test for stored function (SF) calls in different replication modes.
NON DETERMINISTIC SFs are not allowed while doing
statement-based replication (SBR).
2006-11-17 21:30:28 +01:00
|
|
|
SET GLOBAL log_bin_trust_function_creators = 1;
|
|
|
|
|
2006-03-15 18:15:52 +01:00
|
|
|
reset query cache;
|
|
|
|
--disable_warnings
|
|
|
|
drop function if exists f1;
|
|
|
|
--enable_warnings
|
|
|
|
create table t1 (id int);
|
|
|
|
delimiter |;
|
|
|
|
create function f1 ()
|
|
|
|
returns int
|
|
|
|
begin
|
|
|
|
declare i_var int;
|
|
|
|
set i_var = sleep(3);
|
|
|
|
insert into t1 values(3);
|
|
|
|
set i_var = sleep(3);
|
|
|
|
return 0;
|
|
|
|
end;|
|
|
|
|
delimiter ;|
|
|
|
|
|
|
|
|
connect (con1,localhost,root,,);
|
|
|
|
connect (con2,localhost,root,,);
|
|
|
|
|
|
|
|
connection con1;
|
|
|
|
send select f1();
|
|
|
|
connection con2;
|
|
|
|
select sleep(4);
|
|
|
|
select * from t1;
|
|
|
|
connection con1;
|
|
|
|
reap;
|
|
|
|
connection con2;
|
|
|
|
# This gives wrong result i.e. 't' table seems to be empty
|
|
|
|
select * from t1;
|
|
|
|
reset query cache;
|
|
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|
|
drop function f1;
|
|
|
|
disconnect con1;
|
|
|
|
disconnect con2;
|
|
|
|
connection default;
|
2006-02-24 17:34:15 +01:00
|
|
|
|
2005-07-29 14:14:21 +02:00
|
|
|
set GLOBAL query_cache_size=0;
|
2009-01-22 11:28:01 +01:00
|
|
|
|
|
|
|
# End of 5.0 tests
|
2009-01-22 12:22:26 +01:00
|
|
|
|
BUG#37975: wait_for_slave_* should increase the timeout
Problem 1: tests often fail in pushbuild with a timeout when waiting
for the slave to start/stop/receive error.
Fix 1: Updated the wait_for_slave_* macros in the following way:
- The timeout is increased by a factor ten
- Refactored the macros so that wait_for_slave_param does the work for
the other macros.
Problem 2: Tests are often incorrectly written, lacking a
source include/wait_for_slave_to_[start|stop].inc.
Fix 2: Improved the chance to get it right by adding
include/start_slave.inc and include/stop_slave.inc, and updated tests
to use these.
Problem 3: The the built-in test language command
wait_for_slave_to_stop is a misnomer (does not wait for the slave io
thread) and does not give as much debug info in case of failure as
the otherwise equivalent macro
source include/wait_for_slave_sql_to_stop.inc
Fix 3: Replaced all calls to the built-in command by a call to the
macro.
Problem 4: Some, but not all, of the wait_for_slave_* macros had an
implicit connection slave. This made some tests confusing to read,
and made it more difficult to use the macro in circular replication
scenarios, where the connection named master needs to wait.
Fix 4: Removed the implicit connection slave from all
wait_for_slave_* macros, and updated tests to use an explicit
connection slave where necessary.
Problem 5: The macros wait_slave_status.inc and wait_show_pattern.inc
were unused. Moreover, using them is difficult and error-prone.
Fix 5: remove these macros.
Problem 6: log_bin_trust_function_creators_basic failed when running
tests because it assumed @@global.log_bin_trust_function_creators=1,
and some tests modified this variable without resetting it to its
original value.
Fix 6: All tests that use this variable have been updated so that
they reset the value at end of test.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
Added connection slave since includ/wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/extra/rpl_tests/rpl_log.test:
Replaced start slave+wait_slave_status by start_slave.inc
mysql-test/include/reset_master_and_slave.inc:
replaced start/stop slave by start_slave.inc/stop_slave.inc
mysql-test/include/sync_slave_io_with_master.inc:
Improved comments and error message.
mysql-test/include/wait_for_slave_io_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_param.inc:
- Improved usage instructions
- Added more debug info in case of timeout
- Added parameters $slave_param_comparison, $slave_timeout,
$slave_keep_connection, $slave_error_message
mysql-test/include/wait_for_slave_sql_error.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_show_pattern.inc:
Removed unused (and error-prone) file
mysql-test/include/wait_slave_status.inc:
Removed unused (and error-prone) file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_bug26395.test:
Replace stop slave by stop_slave.inc
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
Replace start/stop slave by start_slave.inc/stop_slave.inc.
Replace wait_for_slave_param by wait_for_slave_sql_to_stop.inc.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
Replace wait_slave_status by start_slave.inc
mysql-test/suite/rpl/t/rpl_idempotency.test:
Added connection slave since wait_for_slave_sql_to_stop.inc does not
do that any more.
mysql-test/suite/rpl/t/rpl_incident.test:
Replaced wait_for_slave_to_stop by wait_for_slave_sql_to_stop.inc
mysql-test/suite/rpl/t/rpl_init_slave.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_log_pos.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced wait_for_slave_param by other wait_for_slave_* macros.
mysql-test/suite/rpl/t/rpl_packet.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_server_id1.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_status.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_sp.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_stm_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
Replaced start slave by start_slave.inc.
Added explicit connection slave since wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/t/disabled.def:
Disabled failing test.
mysql-test/t/func_time.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/innodb_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/log_bin_trust_function_creators_func.test:
Restore @@global.log_bin_trust_function_creators at end of test.
Clean up at end of test by dropping the created user.
mysql-test/t/query_cache.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/query_cache_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/rpl_init_slave_func.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/t/timezone2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
2008-07-10 18:09:39 +02:00
|
|
|
SET @@global.log_bin_trust_function_creators = @old_log_bin_trust_function_creators;
|
2007-10-16 14:42:42 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug #30269 Query cache eats memory
|
|
|
|
#
|
|
|
|
--disable_warnings
|
|
|
|
DROP DATABASE IF EXISTS bug30269;
|
|
|
|
--enable_warnings
|
|
|
|
FLUSH STATUS;
|
|
|
|
CREATE DATABASE bug30269;
|
|
|
|
USE bug30269;
|
|
|
|
CREATE TABLE test1 (id int, name varchar(23));
|
|
|
|
CREATE VIEW view1 AS SELECT * FROM test1;
|
|
|
|
INSERT INTO test1 VALUES (5, 'testit');
|
|
|
|
GRANT SELECT (id) ON TABLE bug30269.test1 TO 'bug30269'@'localhost';
|
|
|
|
GRANT SELECT ON TABLE bug30269.view1 TO 'bug30269'@'localhost';
|
|
|
|
set global query_cache_size= 81920;
|
|
|
|
connect (bug30269, localhost, bug30269,,);
|
|
|
|
connection bug30269;
|
|
|
|
USE bug30269;
|
|
|
|
show status like 'Qcache_queries_in_cache';
|
|
|
|
--echo # Select statement not stored in query cache because of column privileges.
|
|
|
|
SELECT id FROM test1 WHERE id>2;
|
|
|
|
show status like 'Qcache_queries_in_cache';
|
|
|
|
SELECT id FROM view1 WHERE id>2;
|
|
|
|
show status like 'Qcache_queries_in_cache';
|
|
|
|
|
|
|
|
connection default;
|
2009-02-09 22:00:15 +01:00
|
|
|
USE test;
|
2007-10-16 14:42:42 +02:00
|
|
|
DROP DATABASE bug30269;
|
|
|
|
disconnect bug30269;
|
|
|
|
DROP USER 'bug30269'@'localhost';
|
|
|
|
|
2015-08-11 18:45:38 +02:00
|
|
|
set GLOBAL query_cache_type=ON;
|
|
|
|
set LOCAL query_cache_type=ON;
|
2019-08-30 15:06:54 +02:00
|
|
|
set GLOBAL query_cache_size=@query_cache_size_save;
|
2007-10-16 14:42:42 +02:00
|
|
|
|
Fix multiple test suite failures in Buildbot due to races in the test cases or missing server features not properly checked
mysql-test/r/func_misc.result:
Move test that requires query cache from main.func_misc to main.query_cache.
mysql-test/r/mysqltest.result:
Fix test failure due to race.
This test case creates > 300 connections in a tight loop, and depending on thread
scheduling and load, even though each connection is immediately disconnected
before connecting the next one, the server max connections may still be exceeded
due to server not being able to free old connections as fast as new ones are made.
mysql-test/r/query_cache.result:
Move test that requires query cache from main.func_misc to main.query_cache.
Move test that requires query cache from main.variables to main.query_cache.
mysql-test/r/query_cache_notembedded.result:
Move test that requires query cache from main.sp_notembedded to main.query_cache_notembedded.
mysql-test/r/sp_notembedded.result:
Move test that requires query cache from main.sp_notembedded to main.query_cache_notembedded.
mysql-test/r/udf.result:
Move test in main.udf that requires query cache to separate file.
mysql-test/r/udf_query_cache.result:
Move test in main.udf that requires query cache to separate file.
mysql-test/r/variables.result:
Move test that requires query cache from main.variables to main.query_cache.
mysql-test/suite/funcs_1/datadict/processlist_val.inc:
Fix race where result file may show state "cleaning up" in the small window
between setting COMMAND to 'Sleep' and clearing STATE.
mysql-test/suite/rpl/r/rpl_temporary.result:
Fix race with suppression of warning message by fixing the test to not generate the
warning message in the first place.
Problem was a race between creating an anonymous account and resetting the slave.
If the slave reset happens before replicating the account, the subsequest deletion
of the account will fail to replicate correctly due to missing row.
mysql-test/suite/rpl/t/rpl_temporary.test:
Fix race with suppression of warning message by fixing the test to not generate the
warning message in the first place.
Problem was a race between creating an anonymous account and resetting the slave.
If the slave reset happens before replicating the account, the subsequest deletion
of the account will fail to replicate correctly due to missing row.
mysql-test/t/func_misc.test:
Move test that requires query cache from main.func_misc to main.query_cache.
Move test that requires query cache from main.variables to main.query_cache.
mysql-test/t/mysqltest.test:
Fix test failure due to race.
This test case creates > 300 connections in a tight loop, and depending on thread
scheduling and load, even though each connection is immediately disconnected
before connecting the next one, the server max connections may still be exceeded
due to server not being able to free old connections as fast as new ones are made.
mysql-test/t/query_cache.test:
Move test that requires query cache to main.query_cache.
mysql-test/t/query_cache_notembedded.test:
Move test that requires query cache from main.sp_notembedded to main.query_cache_notembedded.
mysql-test/t/sp_notembedded.test:
Move test that requires query cache from main.sp_notembedded to main.query_cache_notembedded.
mysql-test/t/udf.test:
Move test in main.udf that requires query cache to separate file.
mysql-test/t/udf_query_cache-master.opt:
Move test in main.udf that requires query cache to separate file.
mysql-test/t/udf_query_cache.test:
Move test in main.udf that requires query cache to separate file.
mysql-test/t/variables.test:
Move test that requires query cache from main.variables to main.query_cache.
tests/mysql_client_test.c:
In tests that require query cache, skip the test if query cache not available.
Do this dynamically rather than using HAVE_QUERY_CACHE, as there is no guarantee
that the server we run against was compiled with same preprocessor #define as
the mysql_client_test program (and since it is trivial to check dynamically).
2010-01-11 14:15:28 +01:00
|
|
|
#
|
|
|
|
# Bug#3583 query cache doesn't work for stored procedures
|
|
|
|
#
|
|
|
|
delimiter |;
|
|
|
|
--disable_warnings
|
|
|
|
drop table if exists t1|
|
|
|
|
--enable_warnings
|
|
|
|
create table t1 (
|
|
|
|
id char(16) not null default '',
|
|
|
|
data int not null
|
|
|
|
)|
|
|
|
|
--disable_warnings
|
|
|
|
drop procedure if exists bug3583|
|
|
|
|
--enable_warnings
|
|
|
|
--disable_warnings
|
|
|
|
drop procedure if exists bug3583|
|
|
|
|
--enable_warnings
|
|
|
|
create procedure bug3583()
|
|
|
|
begin
|
|
|
|
declare c int;
|
|
|
|
|
|
|
|
select * from t1;
|
|
|
|
select count(*) into c from t1;
|
|
|
|
select c;
|
|
|
|
end|
|
|
|
|
|
|
|
|
insert into t1 values ("x", 3), ("y", 5)|
|
|
|
|
set @x = @@query_cache_size|
|
|
|
|
set global query_cache_size = 10*1024*1024|
|
|
|
|
|
|
|
|
flush status|
|
|
|
|
flush query cache|
|
|
|
|
show status like 'Qcache_hits'|
|
|
|
|
call bug3583()|
|
|
|
|
show status like 'Qcache_hits'|
|
|
|
|
call bug3583()|
|
|
|
|
call bug3583()|
|
|
|
|
show status like 'Qcache_hits'|
|
|
|
|
|
|
|
|
set global query_cache_size = @x|
|
|
|
|
flush status|
|
|
|
|
flush query cache|
|
|
|
|
delete from t1|
|
|
|
|
drop procedure bug3583|
|
|
|
|
drop table t1|
|
|
|
|
delimiter ;|
|
|
|
|
|
2009-02-05 21:47:23 +01:00
|
|
|
# Wait till we reached the initial number of concurrent sessions
|
2009-02-09 22:00:15 +01:00
|
|
|
--source include/wait_until_count_sessions.inc
|
2015-08-11 18:45:38 +02:00
|
|
|
SET GLOBAL query_cache_size=@query_cache_size_save;
|
|
|
|
SET GLOBAL query_cache_type=@query_cache_type_save;
|
|
|
|
set GLOBAL sql_mode=@sql_mode_save;
|