diff --git a/mysql-test/r/ndb_cache.result b/mysql-test/r/ndb_cache.result new file mode 100644 index 00000000000..714e1831267 --- /dev/null +++ b/mysql-test/r/ndb_cache.result @@ -0,0 +1,43 @@ +set GLOBAL query_cache_size=1355776; +reset query cache; +flush status; +drop table if exists t1,t2; +CREATE TABLE t1 (a int) ENGINE=ndbcluster; +CREATE TABLE t2 (a int); +select * from t1; +a +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +show status like "Qcache_inserts"; +Variable_name Value +Qcache_inserts 0 +show status like "Qcache_hits"; +Variable_name Value +Qcache_hits 0 +select * from t2; +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 * from t1; +a +select * from t2; +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, t2; +SET GLOBAL query_cache_size=0; diff --git a/mysql-test/t/ndb_cache.test b/mysql-test/t/ndb_cache.test new file mode 100644 index 00000000000..abd09424f64 --- /dev/null +++ b/mysql-test/t/ndb_cache.test @@ -0,0 +1,31 @@ +-- source include/have_query_cache.inc +-- source include/have_ndb.inc + +set GLOBAL query_cache_size=1355776; +reset query cache; +flush status; + +--disable_warnings +drop table if exists t1,t2; +--enable_warnings + +CREATE TABLE t1 (a int) ENGINE=ndbcluster; +CREATE TABLE t2 (a int); + +select * from t1; +show status like "Qcache_queries_in_cache"; +show status like "Qcache_inserts"; +show status like "Qcache_hits"; +select * from t2; +show status like "Qcache_queries_in_cache"; +show status like "Qcache_inserts"; +show status like "Qcache_hits"; +select * from t1; +select * from t2; +show status like "Qcache_queries_in_cache"; +show status like "Qcache_inserts"; +show status like "Qcache_hits"; + +drop table t1, t2; + +SET GLOBAL query_cache_size=0; diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index ed66d07d79b..bd601f39fc4 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -107,7 +107,7 @@ class ha_ndbcluster: public handler return true; #endif } - bool has_transactions() { return true;} + bool has_transactions() { return true; } const char* index_type(uint key_number) { switch (get_index_type(key_number)) { @@ -130,7 +130,7 @@ class ha_ndbcluster: public handler static Ndb* seize_ndb(); static void release_ndb(Ndb* ndb); - + uint8 table_cache_type() { return HA_CACHE_TBL_NOCACHE; } private: int alter_table_name(const char *from, const char *to); diff --git a/sql/handler.h b/sql/handler.h index 62ff74c436a..ac5dceba8ab 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -138,8 +138,10 @@ /* Table caching type */ #define HA_CACHE_TBL_NONTRANSACT 0 -#define HA_CACHE_TBL_ASKTRANSACT 1 -#define HA_CACHE_TBL_TRANSACT 2 +#define HA_CACHE_TBL_NOCACHE 1 +#define HA_CACHE_TBL_ASKTRANSACT 2 +#define HA_CACHE_TBL_TRANSACT 4 + enum db_type { diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index e1a15eff475..f17f4bb2b7f 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -2614,12 +2614,14 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len, */ if (tables_used->table->db_type == DB_TYPE_MRG_ISAM || tables_used->table->tmp_table != NO_TMP_TABLE || + (*tables_type & HA_CACHE_TBL_NOCACHE) || (tables_used->db_length == 5 && my_strnncoll(table_alias_charset, (uchar*)tables_used->db, 6, (uchar*)"mysql",6) == 0)) { DBUG_PRINT("qcache", - ("select not cacheable: used MRG_ISAM, temporary or system table(s)")); + ("select not cacheable: used MRG_ISAM, temporary, \ +system or other non-cacheable table(s)")); DBUG_RETURN(0); } if (tables_used->table->db_type == DB_TYPE_MRG_MYISAM)