summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2004-02-20 22:44:54 +0200
committerunknown <bell@sanja.is.com.ua>2004-02-20 22:44:54 +0200
commitbdf490541dc3715142fbe9a76465f040f13fb875 (patch)
treef09668bcb5a732360f64157d3bb8daee3dd1003c
parent9977ce0c718de3ffc9eeb2445d3eb5fc2ef899cc (diff)
downloadmariadb-git-bdf490541dc3715142fbe9a76465f040f13fb875.tar.gz
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
-rw-r--r--mysql-test/r/lowercase_table.result7
-rw-r--r--mysql-test/r/lowercase_table_qcache.result24
-rw-r--r--mysql-test/t/lowercase_table.test11
-rw-r--r--mysql-test/t/lowercase_table_qcache-master.opt1
-rw-r--r--mysql-test/t/lowercase_table_qcache.test29
-rw-r--r--sql/sql_cache.cc24
-rw-r--r--sql/sql_parse.cc4
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 6acb5901efc..e6eb45174f0 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2670,8 +2670,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)