summaryrefslogtreecommitdiff
path: root/sql/sql_cache.cc
diff options
context:
space:
mode:
authorbell@sanja.is.com.ua <>2005-12-01 14:26:19 +0200
committerbell@sanja.is.com.ua <>2005-12-01 14:26:19 +0200
commit12d1bf12315f5e25ea36453a9df86925e18c9d42 (patch)
tree1d52665449d39aa5645cd456959e1dd1920e2fe8 /sql/sql_cache.cc
parent1a8ac44cff9f2b8103bf47d058e853a4af9d344f (diff)
downloadmariadb-git-12d1bf12315f5e25ea36453a9df86925e18c9d42.tar.gz
We should skip beggining '(' characters when test query on possibility
to be in the query cache. (BUG#14652)
Diffstat (limited to 'sql/sql_cache.cc')
-rw-r--r--sql/sql_cache.cc28
1 files changed, 19 insertions, 9 deletions
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 4214c9a7c07..b40257511f7 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -956,16 +956,26 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
goto err;
}
- /*
- Test if the query is a SELECT
- (pre-space is removed in dispatch_command)
- */
- 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;
+ 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
+ (pre-space is removed in dispatch_command)
+ */
+ if (my_toupper(system_charset_info, sql[i]) != 'S' ||
+ my_toupper(system_charset_info, sql[i + 1]) != 'E' ||
+ my_toupper(system_charset_info, sql[i + 2]) != 'L')
+ {
+ DBUG_PRINT("qcache", ("The statement is not a SELECT; Not cached"));
+ goto err;
+ }
}
STRUCT_LOCK(&structure_guard_mutex);