mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Bug #29053 SQL_CACHE in UNION causes non-deterministic functions to be cached
Changed code to enforce that SQL_CACHE only in the first SELECT is used to turn on caching(as documented), but any SQL_NO_CACHE will turn off caching (not documented, but a useful behaviour, especially for machine generated queries). Added test cases to explicitly test the documented caching behaviour and test cases for the reported bug.
This commit is contained in:
@@ -179,12 +179,22 @@ a
|
||||
1
|
||||
2
|
||||
3
|
||||
select * from t1 where a IN (select sql_cache a from t1);
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select * from t1 where a IN (select a from t1 union select sql_cache a from t1);
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 4
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 2
|
||||
Qcache_queries_in_cache 1
|
||||
set query_cache_type=on;
|
||||
reset query cache;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
@@ -195,6 +205,41 @@ a
|
||||
1
|
||||
2
|
||||
3
|
||||
select * from t1 union select sql_no_cache * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select * from t1 where a IN (select sql_no_cache a from t1);
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select sql_cache sql_no_cache * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select sql_cache * from t1 union select sql_no_cache * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select sql_cache * from t1 where a IN (select sql_no_cache a from t1);
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select sql_cache * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
@@ -1416,3 +1461,9 @@ insert into t1 values ('c');
|
||||
a
|
||||
drop table t1;
|
||||
set GLOBAL query_cache_size= default;
|
||||
set GLOBAL query_cache_size=1000000;
|
||||
create table t1 (a char);
|
||||
insert into t1 values ('c');
|
||||
a
|
||||
drop table t1;
|
||||
set GLOBAL query_cache_size= default;
|
||||
|
||||
Reference in New Issue
Block a user