diff options
-rw-r--r-- | mysql-test/r/lowercase_table.result | 7 | ||||
-rw-r--r-- | mysql-test/r/lowercase_table_qcache.result | 24 | ||||
-rw-r--r-- | mysql-test/t/lowercase_table.test | 11 | ||||
-rw-r--r-- | mysql-test/t/lowercase_table_qcache-master.opt | 1 | ||||
-rw-r--r-- | mysql-test/t/lowercase_table_qcache.test | 29 | ||||
-rw-r--r-- | sql/sql_cache.cc | 24 | ||||
-rw-r--r-- | sql/sql_parse.cc | 4 |
7 files changed, 86 insertions, 14 deletions
diff --git a/mysql-test/r/lowercase_table.result b/mysql-test/r/lowercase_table.result index 0ba4a4be945..f4e7723a608 100644 --- a/mysql-test/r/lowercase_table.result +++ b/mysql-test/r/lowercase_table.result @@ -42,3 +42,10 @@ select count(bags.a) from t1 as Bags; count(bags.a) 0 drop table t1; +create table t1 (a int); +create table t2 (a int); +delete p1.*,P2.* from t1 as p1, t2 as p2 where p1.a=P2.a; +delete P1.*,p2.* from t1 as P1, t2 as P2 where P1.a=p2.a; +update t1 as p1, t2 as p2 SET p1.a=1,P2.a=1 where p1.a=P2.a; +update t1 as P1, t2 as P2 SET P1.a=1,p2.a=1 where P1.a=p2.a; +drop table t1,t2; diff --git a/mysql-test/r/lowercase_table_qcache.result b/mysql-test/r/lowercase_table_qcache.result new file mode 100644 index 00000000000..f8d34e0f592 --- /dev/null +++ b/mysql-test/r/lowercase_table_qcache.result @@ -0,0 +1,24 @@ +set GLOBAL query_cache_size=1355776; +drop database if exists MySQLtesT; +create database MySQLtesT; +create table MySQLtesT.t1 (a int); +select * from MySQLtesT.t1; +a +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 1 +drop database mysqltest; +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +use MySQL; +select * from db; +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +use test; +select * from MySQL.db; +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +set GLOBAL query_cache_size=0; diff --git a/mysql-test/t/lowercase_table.test b/mysql-test/t/lowercase_table.test index 601f1734ac6..42e9cdc9f3d 100644 --- a/mysql-test/t/lowercase_table.test +++ b/mysql-test/t/lowercase_table.test @@ -30,3 +30,14 @@ select count(*) from t1; select count(T1.a) from t1; select count(bags.a) from t1 as Bags; drop table t1; + +# +# multiupdate/delete & --lower-case-table-names +# +create table t1 (a int); +create table t2 (a int); +delete p1.*,P2.* from t1 as p1, t2 as p2 where p1.a=P2.a; +delete P1.*,p2.* from t1 as P1, t2 as P2 where P1.a=p2.a; +update t1 as p1, t2 as p2 SET p1.a=1,P2.a=1 where p1.a=P2.a; +update t1 as P1, t2 as P2 SET P1.a=1,p2.a=1 where P1.a=p2.a; +drop table t1,t2; diff --git a/mysql-test/t/lowercase_table_qcache-master.opt b/mysql-test/t/lowercase_table_qcache-master.opt new file mode 100644 index 00000000000..c718e2feb1b --- /dev/null +++ b/mysql-test/t/lowercase_table_qcache-master.opt @@ -0,0 +1 @@ +--lower_case_table_names diff --git a/mysql-test/t/lowercase_table_qcache.test b/mysql-test/t/lowercase_table_qcache.test new file mode 100644 index 00000000000..7416de25e1d --- /dev/null +++ b/mysql-test/t/lowercase_table_qcache.test @@ -0,0 +1,29 @@ +-- source include/have_query_cache.inc +# +# Test of query cache with --lower-case-table-names +# +set GLOBAL query_cache_size=1355776; + +--disable_warnings +drop database if exists MySQLtesT; +--enable_warnings + +create database MySQLtesT; +create table MySQLtesT.t1 (a int); +select * from MySQLtesT.t1; +show status like "Qcache_queries_in_cache"; +drop database mysqltest; +show status like "Qcache_queries_in_cache"; + +use MySQL; +disable_result_log; +select * from db; +enable_result_log; +show status like "Qcache_queries_in_cache"; +use test; +disable_result_log; +select * from MySQL.db; +enable_result_log; +show status like "Qcache_queries_in_cache"; + +set GLOBAL query_cache_size=0;
\ No newline at end of file diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 7c31281c926..80a3cca315e 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1228,7 +1228,12 @@ void Query_cache::invalidate(char *db) do { next= curr->next; - if (strcmp(db, (char*)(curr->table()->db())) == 0) + /* + table_alias_charset used here because it depends of + lower_case_table_names variable + */ + if (my_strcasecmp(table_alias_charset, db, + (char*)(curr->table()->db())) == 0) invalidate_table(curr); /* invalidate_table can freed block on which point 'next' (if @@ -2562,20 +2567,15 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len, tables_used->db, tables_used->table->db_type)); *tables_type|= tables_used->table->file->table_cache_type(); + /* + table_alias_charset used here because it depends of + lower_case_table_names variable + */ if (tables_used->table->db_type == DB_TYPE_MRG_ISAM || tables_used->table->tmp_table != NO_TMP_TABLE || (tables_used->db_length == 5 && -#ifdef FN_NO_CASE_SENCE - my_strnncoll(system_charset_info, (uchar*)tables_used->db, 6, - (uchar*)"mysql",6) == 0 -#else - tables_used->db[0]=='m' && - tables_used->db[1]=='y' && - tables_used->db[2]=='s' && - tables_used->db[3]=='q' && - tables_used->db[4]=='l' -#endif - )) + my_strnncoll(table_alias_charset, (uchar*)tables_used->db, 6, + (uchar*)"mysql",6) == 0)) { DBUG_PRINT("qcache", ("select not cacheable: used MRG_ISAM, temporary or system table(s)")); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 3100737aaa5..ed72c14b849 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2703,8 +2703,8 @@ mysql_execute_command(THD *thd) TABLE_LIST *walk; for (walk= (TABLE_LIST*) tables; walk; walk= walk->next) { - if (!strcmp(auxi->real_name, walk->alias) && - !strcmp(walk->db, auxi->db)) + if (!my_strcasecmp(table_alias_charset, auxi->alias, walk->alias) && + !my_strcasecmp(table_alias_charset, walk->db, auxi->db)) break; } if (!walk) |