diff options
author | unknown <evgen@moonbone.local> | 2005-12-02 19:42:14 +0300 |
---|---|---|
committer | unknown <evgen@moonbone.local> | 2005-12-02 19:42:14 +0300 |
commit | 454e0852913d6c7bd3bfde72b429614e67fab025 (patch) | |
tree | a6023835c30a5415c611dcc261d8e62e186230a2 /sql/sql_cache.cc | |
parent | 110b887c4e6bbe27577c1ade5dfbc9479957bf20 (diff) | |
parent | f173e09f0dbc117238560ff5936b149d5024871c (diff) | |
download | mariadb-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.cc | 21 |
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); |