diff options
author | monty@mashka.mysql.fi <> | 2002-10-02 17:55:12 +0300 |
---|---|---|
committer | monty@mashka.mysql.fi <> | 2002-10-02 17:55:12 +0300 |
commit | 0f394576131c2f66046673420ca8b1311981a614 (patch) | |
tree | a7ce8fe730bd0e06166bb15edcbe5aef252c2c3b /sql/sql_cache.cc | |
parent | 7377f546316b13c2563fede4c3ed2506d29a93ac (diff) | |
parent | 4d705988d562cac60d44e22f8d6e76df63432c72 (diff) | |
download | mariadb-git-0f394576131c2f66046673420ca8b1311981a614.tar.gz |
Merge with 4.0.4
Diffstat (limited to 'sql/sql_cache.cc')
-rw-r--r-- | sql/sql_cache.cc | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 149b10ecc99..7c51cac0f3a 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -278,6 +278,21 @@ TODO list: - Move MRG_MYISAM table type processing to handlers, something like: tables_used->table->file->register_used_filenames(callback, first_argument); + - Make derived tables cachable. + - QC improvement suggested by Monty: + - Add a counter in open_table() for how many MERGE (ISAM or MyISAM) + tables are cached in the table cache. + (This will be trivial when we have the new table cache in place I + have been working on) + - After this we can add the following test around the for loop in + is_cacheable:: + + if (thd->temp_tables || global_merge_table_count) + + - Another option would be to set thd->safe_to_cache_query to 0 + in 'get_lock_data' if any of the tables was a tmp table or a + MRG_ISAM table. + (This could be done with almost no speed penalty) */ #include "mysql_priv.h" @@ -888,8 +903,9 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) Test if the query is a SELECT (pre-space is removed in dispatch_command) */ - if (toupper(sql[0]) != 'S' || toupper(sql[1]) != 'E' || - toupper(sql[2]) !='L') + if (my_toupper(system_charset_info, sql[0]) != 'S' || + my_toupper(system_charset_info, sql[1]) != 'E' || + my_toupper(system_charset_info,sql[2]) !='L') { DBUG_PRINT("qcache", ("The statement is not a SELECT; Not cached")); goto err; @@ -1376,17 +1392,16 @@ ulong Query_cache::init_cache() DUMP(this); - VOID(hash_init(&queries,def_query_hash_size, 0, 0, + VOID(hash_init(&queries,system_charset_info,def_query_hash_size, 0, 0, query_cache_query_get_key, 0, 0)); -#ifndef __WIN__ - VOID(hash_init(&tables,def_table_hash_size, 0, 0, - query_cache_table_get_key, 0, 0)); -#else - // windows case insensitive file names work around - VOID(hash_init(&tables,def_table_hash_size, 0, 0, - query_cache_table_get_key, 0, - (lower_case_table_names?0:HASH_CASE_INSENSITIVE))); -#endif + /* + On windows we have to compare names case insensitive as for the OS + A.frm and a.frm are the same file. + */ + VOID(hash_init(&tables,system_charset_info,def_table_hash_size, 0, 0, + query_cache_table_get_key, 0, + IF_WIN((lower_case_table_names ? 0: HASH_CASE_INSENSITIVE), + 0))); queries_in_cache = 0; queries_blocks = 0; |