summaryrefslogtreecommitdiff
path: root/sql/sql_cache.cc
diff options
context:
space:
mode:
authorunknown <dlenev@brandersnatch.localdomain>2004-05-22 23:41:58 +0400
committerunknown <dlenev@brandersnatch.localdomain>2004-05-22 23:41:58 +0400
commit0e86cf8aba3c7d067dd28efd78f138d467ec7e7b (patch)
tree396b746d77b997977420c7bc8c1903ab26a53a21 /sql/sql_cache.cc
parent11ee33b181f20b3d746da871918c96890480a1ae (diff)
downloadmariadb-git-0e86cf8aba3c7d067dd28efd78f138d467ec7e7b.tar.gz
Fix for bug which caused grant.test fail on darwin7.3. We were converting db and table
names to lower case using latin1 instead of utf-8 in sql_acl.cc if lower_case_table_names was on. Also replaced in other such places system_charset_info with files_charset_info for consistency. sql/handler.cc: Replaced system_charset_info with files_charset_info in places where we are converting names to lower case because of lower_case_table_names for consistency. sql/sql_acl.cc: We should use files_charset_info when converting db/table names to lower case because they could be in utf-8 and not in latin1! sql/sql_cache.cc: Added clarifying comments in tricky place after discussion with Sanja. Replaced system_charset_info with files_charset_info in places where we are converting names to lower case because of lower_case_table_names for consistency. sql/sql_db.cc: Replaced system_charset_info with files_charset_info in places where we are converting names to lower case because of lower_case_table_names for consistency. sql/sql_show.cc: Replaced system_charset_info with files_charset_info in places where we are converting names to lower case because of lower_case_table_names for consistency. sql/sql_table.cc: Replaced system_charset_info with files_charset_info in places where we are converting names to lower case because of lower_case_table_names for consistency.
Diffstat (limited to 'sql/sql_cache.cc')
-rw-r--r--sql/sql_cache.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index d7d4219c7fd..b9fe61ac48a 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -1512,13 +1512,28 @@ ulong Query_cache::init_cache()
VOID(hash_init(&queries, &my_charset_bin, def_query_hash_size, 0, 0,
query_cache_query_get_key, 0, 0));
#ifndef FN_NO_CASE_SENCE
+ /*
+ If lower_case_table_names!=0 then db and table names are already
+ converted to lower case and we can use binary collation for their
+ comparison (no matter if file system case sensitive or not).
+ If we have case-sensitive file system (like on most Unixes) and
+ lower_case_table_names == 0 then we should distinguish my_table
+ and MY_TABLE cases and so again can use binary collation.
+ */
VOID(hash_init(&tables, &my_charset_bin, def_table_hash_size, 0, 0,
query_cache_table_get_key, 0, 0));
#else
- // windows, OS/2 or other case insensitive file names work around
+ /*
+ On windows, OS/2, MacOS X with HFS+ or any other case insensitive
+ file system if lower_case_table_names!=0 we have same situation as
+ in previous case, but if lower_case_table_names==0 then we should
+ not distinguish cases (to be compatible in behavior with underlaying
+ file system) and so should use case insensitive collation for
+ comparison.
+ */
VOID(hash_init(&tables,
lower_case_table_names ? &my_charset_bin :
- system_charset_info,
+ files_charset_info,
def_table_hash_size, 0, 0,query_cache_table_get_key, 0, 0));
#endif