fixed comparation of tables/database names with --lower_case_table_names (BUG#2880)
mysql-test/r/lowercase_table.result: test of multi-update/multi-delete mysql-test/t/lowercase_table.test: test of multi-update/multi-delete sql/sql_cache.cc: correct databese names comparation sql/sql_parse.cc: correct table names comparation in multi-delete
This commit is contained in:
parent
9977ce0c71
commit
bdf490541d
@ -42,3 +42,10 @@ select count(bags.a) from t1 as Bags;
|
|||||||
count(bags.a)
|
count(bags.a)
|
||||||
0
|
0
|
||||||
drop table t1;
|
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;
|
||||||
|
24
mysql-test/r/lowercase_table_qcache.result
Normal file
24
mysql-test/r/lowercase_table_qcache.result
Normal file
@ -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;
|
@ -30,3 +30,14 @@ select count(*) from t1;
|
|||||||
select count(T1.a) from t1;
|
select count(T1.a) from t1;
|
||||||
select count(bags.a) from t1 as Bags;
|
select count(bags.a) from t1 as Bags;
|
||||||
drop table t1;
|
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;
|
||||||
|
1
mysql-test/t/lowercase_table_qcache-master.opt
Normal file
1
mysql-test/t/lowercase_table_qcache-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--lower_case_table_names
|
29
mysql-test/t/lowercase_table_qcache.test
Normal file
29
mysql-test/t/lowercase_table_qcache.test
Normal file
@ -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;
|
@ -1228,7 +1228,12 @@ void Query_cache::invalidate(char *db)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
next= curr->next;
|
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(curr);
|
||||||
/*
|
/*
|
||||||
invalidate_table can freed block on which point 'next' (if
|
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_used->db, tables_used->table->db_type));
|
||||||
*tables_type|= tables_used->table->file->table_cache_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 ||
|
if (tables_used->table->db_type == DB_TYPE_MRG_ISAM ||
|
||||||
tables_used->table->tmp_table != NO_TMP_TABLE ||
|
tables_used->table->tmp_table != NO_TMP_TABLE ||
|
||||||
(tables_used->db_length == 5 &&
|
(tables_used->db_length == 5 &&
|
||||||
#ifdef FN_NO_CASE_SENCE
|
my_strnncoll(table_alias_charset, (uchar*)tables_used->db, 6,
|
||||||
my_strnncoll(system_charset_info, (uchar*)tables_used->db, 6,
|
(uchar*)"mysql",6) == 0))
|
||||||
(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
|
|
||||||
))
|
|
||||||
{
|
{
|
||||||
DBUG_PRINT("qcache",
|
DBUG_PRINT("qcache",
|
||||||
("select not cacheable: used MRG_ISAM, temporary or system table(s)"));
|
("select not cacheable: used MRG_ISAM, temporary or system table(s)"));
|
||||||
|
@ -2670,8 +2670,8 @@ mysql_execute_command(THD *thd)
|
|||||||
TABLE_LIST *walk;
|
TABLE_LIST *walk;
|
||||||
for (walk= (TABLE_LIST*) tables; walk; walk= walk->next)
|
for (walk= (TABLE_LIST*) tables; walk; walk= walk->next)
|
||||||
{
|
{
|
||||||
if (!strcmp(auxi->real_name, walk->alias) &&
|
if (!my_strcasecmp(table_alias_charset, auxi->alias, walk->alias) &&
|
||||||
!strcmp(walk->db, auxi->db))
|
!my_strcasecmp(table_alias_charset, walk->db, auxi->db))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!walk)
|
if (!walk)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user