Bug #72547 | Query cache not invalidated on cascade delete if db name has special symbols | ||
---|---|---|---|
Submitted: | 6 May 2014 10:49 | Modified: | 28 Aug 2014 17:48 |
Reporter: | Elena Stepanova | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Query Cache | Severity: | S2 (Serious) |
Version: | 5.6, 5.7 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[6 May 2014 10:49]
Elena Stepanova
[6 May 2014 11:28]
MySQL Verification Team
Hello Elena, Thank you for the bug report and test case. Verified as described on latest builds 5.6.18/19. Thanks, Umesh
[6 May 2014 11:29]
MySQL Verification Team
// 5.6.19 - affected MySQL Version 5.6.19 Checking supported features... - SSL connections supported Collecting tests... Removing old var directory... Creating var directory '/data/ushastry/server/mysql-advanced-5.6.19/mysql-test/var'... Installing system database... ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009 SET @query_cache_size.saved = @@query_cache_size; SET GLOBAL query_cache_size = 1024*1024; DROP DATABASE IF EXISTS `db-db`; Warnings: Note 1008 Can't drop database 'db-db'; database doesn't exist CREATE DATABASE `db-db`; USE `db-db`; connect con2,localhost,root,,db-db; create table t1 (id int primary key) ENGINE=InnoDB; create table t2 ( id int primary key, t1_id int, constraint t2_fk foreign key (t1_id) references t1 (id) on delete cascade ) ENGINE=InnoDB; insert into t1 values (100); insert into t2 values (1,100); select * from t2; id t1_id 1 100 connection default; delete from t1 where id=100; select * from t2; id t1_id 1 100 select SQL_NO_CACHE * from t2; id t1_id
[28 Aug 2014 17:48]
Paul DuBois
Noted in 5.6.21, 5.7.5 changelogs. The query cache was not invalidated for a table when a CASCADE DELETE or CASCADE UPDATE referential constraint was specified and the database name or table name contained special characters.
[25 Sep 2014 12:09]
Laurynas Biveinis
revno: 6106 committer: Nisha Gopalakrishnan <nisha.gopalakrishnan@oracle.com> branch nick: mysql-5.6-18710853 timestamp: Sat 2014-08-02 13:21:08 +0530 message: BUG#18710853: QUERY CACHE NOT INVALIDATED ON CASCADE DELETE IF DB NAME HAS SPECIAL SYMBOLS Analysis -------- The query cache is not invalidated for a table when the CASCADE DELETE/UPDATE referential constraint is specified and the database name or table name contains special characters. InnoDB triggers invalidation of the query cache while performing the check for CASCADE DELETE/UPDATE referential constraint. InnoDB passes the key in the format of 'dbname\0tablename' to the query cache interface where the database name and table name are in the canonical format(encoded-format for special characters). The key used by the query cache interface is 'dbname\0tablename' in its non-canonical format. The lookup performed for query cache invalidation fails for the condition specified above due to the mismatch in the key. Hence the records fetched with the query cache and without the query cache differs. Fix --- Innodb now passes the key 'dbname\0tablename' in its non-canonical format to the query cache interface. Thus the query cache look up succeeds and the query is invalidated.