mirror of https://github.com/MariaDB/server
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							359 lines
						
					
					
						
							8.6 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							359 lines
						
					
					
						
							8.6 KiB
						
					
					
				| -- source include/have_query_cache.inc | |
| -- source include/not_embedded.inc | |
| 
 | |
| # Save the initial number of concurrent sessions | |
| --source include/count_sessions.inc | |
| 
 | |
| # | |
| # Tests with query cache | |
| # | |
| 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=""; | |
| 
 | |
| # 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; | |
| 
 | |
| # | |
| # do not use QC if tables locked (Bug#12385) | |
| # | |
| connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); | |
| connection root; | |
| CREATE TABLE t1 ( a INT NOT NULL PRIMARY KEY AUTO_INCREMENT ) ENGINE = | |
| MyISAM; | |
| LOCK TABLE t1 READ LOCAL; | |
| connect (root2,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); | |
| connection root2; | |
| INSERT INTO t1 VALUES (), (), (); | |
| connection root; | |
| SELECT * FROM t1; | |
| connection root2; | |
| SELECT * FROM t1; | |
| connection root; | |
| SELECT * FROM t1; | |
| UNLOCK TABLES; | |
| drop table t1; | |
| connection default; | |
| disconnect root; | |
| disconnect root2; | |
| 
 | |
| # | |
| # query in QC from normal execution and SP (Bug#6897) | |
| # improved to also test Bug#3583 and Bug#12990 | |
| # | |
| 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; | |
| 
 | |
| # | |
| # Bug#14767 INSERT in SF + concurrent SELECT with query cache | |
| # | |
| connection default; | |
| SET @old_log_bin_trust_function_creators= @@global.log_bin_trust_function_creators; | |
| SET GLOBAL log_bin_trust_function_creators = 1; | |
| 
 | |
| 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; | |
| 
 | |
| set GLOBAL query_cache_size=0; | |
| 
 | |
| # End of 5.0 tests | |
| 
 | |
| SET @@global.log_bin_trust_function_creators = @old_log_bin_trust_function_creators; | |
| 
 | |
| # | |
| # 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; | |
| USE test; | |
| DROP DATABASE bug30269; | |
| disconnect bug30269; | |
| DROP USER 'bug30269'@'localhost'; | |
| 
 | |
| set GLOBAL query_cache_type=ON; | |
| set LOCAL query_cache_type=ON; | |
| set GLOBAL query_cache_size=@query_cache_size_save; | |
| 
 | |
| # | |
| # 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 ;| | |
| 
 | |
| --echo # | |
| --echo # MDEV-29760 DROP DATABASE hangs when particular query cache is present | |
| --echo # | |
| 
 | |
| create table t1 (id int); | |
| create table t2 like t1; | |
| create table t3 like t1; | |
| 
 | |
| create database d; | |
| 
 | |
| create table d.t1 like test.t1; | |
| create table d.t2 like test.t2; | |
| 
 | |
| set LOCAL query_cache_type=ON; | |
| 
 | |
| select id from t3; | |
| select 'x' a, 'y' b from d.t1; | |
| select 'x' a, 'y' b from d.t1, d.t2; | |
| 
 | |
| drop database d; | |
| 
 | |
| drop table t1, t2, t3; | |
| 
 | |
| --echo # | |
| --echo # End of 10.5 tests | |
| --echo # | |
| 
 | |
| # Wait till we reached the initial number of concurrent sessions | |
| --source include/wait_until_count_sessions.inc | |
| 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;
 |