Commit f5833989 authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-5.0

into  sanja.is.com.ua:/home/bell/mysql/bk/work-bug1-5.0
parents d6d1a9aa bfdb6ca3
This diff is collapsed.
...@@ -616,6 +616,7 @@ set character_set_results=cp1251; ...@@ -616,6 +616,7 @@ set character_set_results=cp1251;
SELECT a,'',''='' FROM t1; SELECT a,'',''='' FROM t1;
show status like "Qcache_hits"; show status like "Qcache_hits";
show status like "Qcache_queries_in_cache"; show status like "Qcache_queries_in_cache";
SET NAMES default;
DROP TABLE t1; DROP TABLE t1;
...@@ -711,9 +712,10 @@ repair table t1; ...@@ -711,9 +712,10 @@ repair table t1;
show status like 'qcache_queries_in_cache'; show status like 'qcache_queries_in_cache';
drop table t1; drop table t1;
#
# Bug #9549: Make sure cached queries that span more than one cache block # Bug #9549: Make sure cached queries that span more than one cache block
# are handled properly in the embedded server. # are handled properly in the embedded server.
#
# We just want a small query cache, so we can fragment it easily # We just want a small query cache, so we can fragment it easily
set GLOBAL query_cache_size=64*1024; set GLOBAL query_cache_size=64*1024;
# This actually gives us a usable cache size of about 48K # This actually gives us a usable cache size of about 48K
...@@ -755,6 +757,8 @@ select a from t1; ...@@ -755,6 +757,8 @@ select a from t1;
flush query cache; flush query cache;
drop table t1, t2; drop table t1, t2;
set GLOBAL query_cache_size=1355776
# #
# Query with warning prohibited to query cache (BUG#9414) # Query with warning prohibited to query cache (BUG#9414)
...@@ -832,4 +836,43 @@ drop procedure p1// ...@@ -832,4 +836,43 @@ drop procedure p1//
drop table t1// drop table t1//
delimiter ;// delimiter ;//
#
# query in QC from normal execution and SP (BUG#6897)
#
flush query cache;
reset query cache;
flush status;
delimiter //;
create table t1 (s1 int)//
create procedure f1 () begin
select sql_cache * from t1;
select sql_cache * from t1;
end;//
delimiter ;//
call f1();
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
call f1();
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
call f1();
select sql_cache * from t1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
insert into t1 values (1);
select sql_cache * from t1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
call f1();
call f1();
select sql_cache * from t1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
drop procedure f1;
drop table t1;
set GLOBAL query_cache_size=0; set GLOBAL query_cache_size=0;
...@@ -526,6 +526,7 @@ struct Query_cache_query_flags ...@@ -526,6 +526,7 @@ struct Query_cache_query_flags
{ {
unsigned int client_long_flag:1; unsigned int client_long_flag:1;
unsigned int client_protocol_41:1; unsigned int client_protocol_41:1;
unsigned int more_results_exists:1;
uint character_set_client_num; uint character_set_client_num;
uint character_set_results_num; uint character_set_results_num;
uint collation_connection_num; uint collation_connection_num;
......
...@@ -774,10 +774,11 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used) ...@@ -774,10 +774,11 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
Query_cache_query_flags flags; Query_cache_query_flags flags;
// fill all gaps between fields with 0 to get repeatable key // fill all gaps between fields with 0 to get repeatable key
bzero(&flags, QUERY_CACHE_FLAGS_SIZE); bzero(&flags, QUERY_CACHE_FLAGS_SIZE);
flags.client_long_flag= (thd->client_capabilities & CLIENT_LONG_FLAG ? flags.client_long_flag= test(thd->client_capabilities & CLIENT_LONG_FLAG);
1 : 0); flags.client_protocol_41= test(thd->client_capabilities &
flags.client_protocol_41= (thd->client_capabilities & CLIENT_PROTOCOL_41 ? CLIENT_PROTOCOL_41);
1 : 0); flags.more_results_exists= test(thd->server_status &
SERVER_MORE_RESULTS_EXISTS);
flags.character_set_client_num= flags.character_set_client_num=
thd->variables.character_set_client->number; thd->variables.character_set_client->number;
flags.character_set_results_num= flags.character_set_results_num=
...@@ -791,6 +792,20 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used) ...@@ -791,6 +792,20 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
flags.sql_mode= thd->variables.sql_mode; flags.sql_mode= thd->variables.sql_mode;
flags.max_sort_length= thd->variables.max_sort_length; flags.max_sort_length= thd->variables.max_sort_length;
flags.group_concat_max_len= thd->variables.group_concat_max_len; flags.group_concat_max_len= thd->variables.group_concat_max_len;
DBUG_PRINT("qcache", ("long %d, 4.1: %d, more results %d, \
CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
sql mode: 0x%lx, sort len: %lu, conncat len: %lu",
(int)flags.client_long_flag,
(int)flags.client_protocol_41,
(int)flags.more_results_exists,
flags.character_set_client_num,
flags.character_set_results_num,
flags.collation_connection_num,
flags.limit,
(ulong)flags.time_zone,
flags.sql_mode,
flags.max_sort_length,
flags.group_concat_max_len));
STRUCT_LOCK(&structure_guard_mutex); STRUCT_LOCK(&structure_guard_mutex);
if (query_cache_size == 0) if (query_cache_size == 0)
...@@ -973,10 +988,11 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) ...@@ -973,10 +988,11 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
// fill all gaps between fields with 0 to get repeatable key // fill all gaps between fields with 0 to get repeatable key
bzero(&flags, QUERY_CACHE_FLAGS_SIZE); bzero(&flags, QUERY_CACHE_FLAGS_SIZE);
flags.client_long_flag= (thd->client_capabilities & CLIENT_LONG_FLAG ? flags.client_long_flag= test(thd->client_capabilities & CLIENT_LONG_FLAG);
1 : 0); flags.client_protocol_41= test(thd->client_capabilities &
flags.client_protocol_41= (thd->client_capabilities & CLIENT_PROTOCOL_41 ? CLIENT_PROTOCOL_41);
1 : 0); flags.more_results_exists= test(thd->server_status &
SERVER_MORE_RESULTS_EXISTS);
flags.character_set_client_num= thd->variables.character_set_client->number; flags.character_set_client_num= thd->variables.character_set_client->number;
flags.character_set_results_num= flags.character_set_results_num=
(thd->variables.character_set_results ? (thd->variables.character_set_results ?
...@@ -988,6 +1004,20 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) ...@@ -988,6 +1004,20 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
flags.sql_mode= thd->variables.sql_mode; flags.sql_mode= thd->variables.sql_mode;
flags.max_sort_length= thd->variables.max_sort_length; flags.max_sort_length= thd->variables.max_sort_length;
flags.group_concat_max_len= thd->variables.group_concat_max_len; flags.group_concat_max_len= thd->variables.group_concat_max_len;
DBUG_PRINT("qcache", ("long %d, 4.1: %d, more results %d, \
CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
sql mode: 0x%lx, sort len: %lu, conncat len: %lu",
(int)flags.client_long_flag,
(int)flags.client_protocol_41,
(int)flags.more_results_exists,
flags.character_set_client_num,
flags.character_set_results_num,
flags.collation_connection_num,
flags.limit,
(ulong)flags.time_zone,
flags.sql_mode,
flags.max_sort_length,
flags.group_concat_max_len));
memcpy((void *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)), memcpy((void *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)),
&flags, QUERY_CACHE_FLAGS_SIZE); &flags, QUERY_CACHE_FLAGS_SIZE);
query_block = (Query_cache_block *) hash_search(&queries, (byte*) sql, query_block = (Query_cache_block *) hash_search(&queries, (byte*) sql,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment