summaryrefslogtreecommitdiff
path: root/sql/sql_cache.cc
diff options
context:
space:
mode:
authorunknown <evgen@moonbone.local>2005-12-02 19:42:14 +0300
committerunknown <evgen@moonbone.local>2005-12-02 19:42:14 +0300
commit454e0852913d6c7bd3bfde72b429614e67fab025 (patch)
treea6023835c30a5415c611dcc261d8e62e186230a2 /sql/sql_cache.cc
parent110b887c4e6bbe27577c1ade5dfbc9479957bf20 (diff)
parentf173e09f0dbc117238560ff5936b149d5024871c (diff)
downloadmariadb-git-454e0852913d6c7bd3bfde72b429614e67fab025.tar.gz
Manually merged
mysql-test/r/update.result: Auto merged mysql-test/t/update.test: Auto merged ndb/src/kernel/blocks/backup/Backup.cpp: Auto merged sql/sql_update.cc: Auto merged
Diffstat (limited to 'sql/sql_cache.cc')
-rw-r--r--sql/sql_cache.cc21
1 files changed, 19 insertions, 2 deletions
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 3965079988b..f1cea4f3dac 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -990,8 +990,25 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
my_toupper(system_charset_info,sql[2]) !='L') &&
sql[0] != '/')
{
- 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);