mariadb/mysql-test/suite/innodb/t/innodb_query_cache.test
Thirunarayanan Balathandayuthapani eb77f8cf8d MDEV-16087 Inconsistent SELECT results when query cache is enabled
The following conditions will decide the query cache retrieval or
storing inside innodb:

    (1) There should not be any locks on the table.
    (2) Some other trx shouldn't invalidated the cache before the
    transaction started.
    (3) Read view shouldn't exist. If exists then the view
    low_limit_id should be greater than or equal to the transaction that
    invalidates the cache for the particular table.

 For read-only transaction: should satisfy  the above (1) and (3)
 For read-write transaction: should satisfy the above (1), (2), (3).

 - Changed the variable from query_cache_inv_id to query_cache_inv_trx_id.

 - Moved the function row_search_check_if_query_cache_permitted from
    row0sel.h and made it as static function in ha_innodb.cc
2018-06-18 14:26:37 +05:30

47 lines
1 KiB
Text

-- source include/have_innodb.inc
-- source include/have_query_cache.inc
-- source include/not_embedded.inc
--echo #
--echo # MDEV-16087 Inconsistent SELECT results when query cache is enabled
--echo #
set GLOBAL query_cache_type=ON;
set LOCAL query_cache_type=ON;
create table t1 (id bigint(20) auto_increment, primary key (id)) ENGINE=InnoDB;
create table t2 (id bigint(20) auto_increment, primary key (id)) ENGINE=InnoDB;
create table t3 (id bigint(20) auto_increment, primary key (id)) ENGINE=InnoDB;
connect (con1,localhost,root);
START TRANSACTION WITH CONSISTENT SNAPSHOT;
select * from t2;
connection default;
insert into t3 () values ();
connection con1;
insert into t1 () values ();
select * from t3;
connect (con2,localhost,root);
START TRANSACTION WITH CONSISTENT SNAPSHOT;
select * from t3;
select * from t3;
select sql_no_cache * from t3;
rollback;
connection con1;
rollback;
disconnect con1;
disconnect con2;
connection default;
drop table t1;
drop table t2;
drop table t3;
set GLOBAL query_cache_type=default;