Commit f0b33dd9 authored by unknown's avatar unknown

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

into  sanja.is.com.ua:/home/bell/mysql/bk/work-merge1-5.0


configure.in:
  merge
mysql-test/r/query_cache.result:
  merge
mysql-test/t/query_cache.test:
  merge
sql/sql_cache.cc:
  merge
parents 483e04b2 a050707b
...@@ -850,6 +850,31 @@ group_concat(a) ...@@ -850,6 +850,31 @@ group_concat(a)
set group_concat_max_len=default; set group_concat_max_len=default;
drop table t1; drop table t1;
create table t1 (a int); create table t1 (a int);
flush status;
(select a from t1) union (select a from t1);
a
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
(select a from t1) union (select a from t1);
a
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
drop table t1;
create table t1 (a int);
show status like "Qcache_queries_in_cache"; show status like "Qcache_queries_in_cache";
Variable_name Value Variable_name Value
Qcache_queries_in_cache 0 Qcache_queries_in_cache 0
......
...@@ -742,6 +742,21 @@ show status like "Qcache_inserts"; ...@@ -742,6 +742,21 @@ show status like "Qcache_inserts";
show status like "Qcache_hits"; show status like "Qcache_hits";
drop table t1; drop table t1;
#
# BUG#14652: Queries with leading '(' characters.
#
create table t1 (a int);
flush status;
(select a from t1) union (select a from t1);
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
(select a from t1) union (select a from t1);
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
drop table t1;
# #
# SP cursors and selects with query cache (BUG#9715) # SP cursors and selects with query cache (BUG#9715)
# #
......
...@@ -977,22 +977,32 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) ...@@ -977,22 +977,32 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
goto err; goto err;
} }
{
uint i= 0;
/*
Skip '(' characters in queries like following:
(select a from t1) union (select a from t1);
*/
while (sql[i]=='(')
i++;
/* /*
Test if the query is a SELECT Test if the query is a SELECT
(pre-space is removed in dispatch_command). (pre-space is removed in dispatch_command)
First '/' looks like comment before command it is not First '/' looks like comment before command it is not
frequently appeared in real lihe, consequently we can frequently appeared in real lihe, consequently we can
check all such queries, too. check all such queries, too.
*/ */
if ((my_toupper(system_charset_info, sql[0]) != 'S' || if ((my_toupper(system_charset_info, sql[i]) != 'S' ||
my_toupper(system_charset_info, sql[1]) != 'E' || my_toupper(system_charset_info, sql[i + 1]) != 'E' ||
my_toupper(system_charset_info,sql[2]) !='L') && my_toupper(system_charset_info, sql[i + 2]) != 'L') &&
sql[0] != '/') sql[i] != '/')
{ {
DBUG_PRINT("qcache", ("The statement is not a SELECT; Not cached")); DBUG_PRINT("qcache", ("The statement is not a SELECT; Not cached"));
goto err; goto err;
} }
}
STRUCT_LOCK(&structure_guard_mutex); STRUCT_LOCK(&structure_guard_mutex);
if (query_cache_size == 0) if (query_cache_size == 0)
......
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