summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/ha_ndbcluster.cc19
-rw-r--r--sql/ha_ndbcluster.h2
-rw-r--r--sql/mysqld.cc18
-rw-r--r--sql/set_var.cc18
-rw-r--r--sql/sql_cache.cc6
-rw-r--r--sql/sql_cache.h1
-rw-r--r--sql/sql_class.h2
7 files changed, 46 insertions, 20 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 8d82f60ae85..eea051be9e4 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -3025,7 +3025,9 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
m_transaction_on= FALSE;
else
m_transaction_on= thd->variables.ndb_use_transactions;
- m_use_local_query_cache= thd->variables.ndb_use_local_query_cache;
+#ifdef HAVE_QUERY_CACHE
+ m_query_cache_type= thd->variables.ndb_query_cache_type;
+#endif
m_active_trans= thd->transaction.all.ndb_tid ?
(NdbConnection*)thd->transaction.all.ndb_tid:
@@ -3751,8 +3753,8 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
m_force_send(TRUE),
m_autoincrement_prefetch(32),
m_transaction_on(TRUE),
- m_use_local_query_cache(FALSE)
-{
+ m_query_cache_type(0)
+{
int i;
DBUG_ENTER("ha_ndbcluster");
@@ -4455,10 +4457,17 @@ const char* ha_ndbcluster::index_type(uint key_number)
}
uint8 ha_ndbcluster::table_cache_type()
{
- if (m_use_local_query_cache)
+ switch (m_query_cache_type)
+ {
+ case 0:
+ return HA_CACHE_TBL_NOCACHE;
+ case 1:
+ return HA_CACHE_TBL_ASKTRANSACT;
+ case 2:
return HA_CACHE_TBL_TRANSACT;
- else
+ default:
return HA_CACHE_TBL_NOCACHE;
+ }
}
/*
diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h
index f6c712620c1..baf4a7480ac 100644
--- a/sql/ha_ndbcluster.h
+++ b/sql/ha_ndbcluster.h
@@ -244,7 +244,7 @@ class ha_ndbcluster: public handler
bool m_force_send;
ha_rows m_autoincrement_prefetch;
bool m_transaction_on;
- bool m_use_local_query_cache;
+ ulong m_query_cache_type;
void set_rec_per_key();
void records_update();
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index f7c89f6dde3..51e12ff23f9 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -3954,7 +3954,7 @@ enum options_mysqld
OPT_INNODB, OPT_ISAM,
OPT_NDBCLUSTER, OPT_NDB_CONNECTSTRING, OPT_NDB_USE_EXACT_COUNT,
OPT_NDB_FORCE_SEND, OPT_NDB_AUTOINCREMENT_PREFETCH_SZ,
- OPT_NDB_USE_LOCAL_QUERY_CACHE,
+ OPT_NDB_QUERY_CACHE_TYPE,
OPT_SKIP_SAFEMALLOC,
OPT_TEMP_POOL, OPT_TX_ISOLATION,
OPT_SKIP_STACK_TRACE, OPT_SKIP_SYMLINKS,
@@ -4414,12 +4414,16 @@ Disable with --skip-ndbcluster (will save memory).",
(gptr*) &global_system_variables.ndb_use_exact_count,
(gptr*) &global_system_variables.ndb_use_exact_count,
0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},
- {"ndb_use_local_query_cache", OPT_NDB_USE_LOCAL_QUERY_CACHE,
- "Use local query cache, note that this cache will _not_ "
- "be invalidated if data is updated through other mysql servers",
- (gptr*) &global_system_variables.ndb_use_local_query_cache,
- (gptr*) &global_system_variables.ndb_use_local_query_cache,
- 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
+#ifdef HAVE_QUERY_CACHE
+ {"ndb_query_cache_type", OPT_NDB_QUERY_CACHE_TYPE,
+ "0 = OFF = Don't cache or retrieve results. 1 = ON = Cache as query_cache_type states and "
+ "invalidate cache if tables are updated by other mysql servers. "
+ "2 = LOCAL = Cache as query_cache_type states and don't bother about what's happening on other "
+ "mysql servers.",
+ (gptr*) &global_system_variables.ndb_query_cache_type,
+ (gptr*) &global_system_variables.ndb_query_cache_type,
+ 0, GET_ULONG, REQUIRED_ARG, 0, 0, 2, 0, 0, 0},
+#endif
#endif
{"new", 'n', "Use very new possible 'unsafe' functions.",
(gptr*) &global_system_variables.new_mode,
diff --git a/sql/set_var.cc b/sql/set_var.cc
index a040e8b2ba4..c51bfce7a43 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -370,9 +370,12 @@ sys_ndb_force_send("ndb_force_send",
sys_var_thd_bool
sys_ndb_use_exact_count("ndb_use_exact_count",
&SV::ndb_use_exact_count);
-sys_var_thd_bool
-sys_ndb_use_local_query_cache("ndb_use_local_query_cache",
- &SV::ndb_use_local_query_cache);
+#ifdef HAVE_QUERY_CACHE
+sys_var_thd_enum
+sys_ndb_query_cache_type("ndb_query_cache_type",
+ &SV::ndb_query_cache_type,
+ &ndb_query_cache_type_typelib);
+#endif
sys_var_thd_bool
sys_ndb_use_transactions("ndb_use_transactions",
&SV::ndb_use_transactions);
@@ -637,7 +640,9 @@ sys_var *sys_variables[]=
&sys_ndb_autoincrement_prefetch_sz,
&sys_ndb_force_send,
&sys_ndb_use_exact_count,
- &sys_ndb_use_local_query_cache,
+#ifdef HAVE_QUERY_CACHE
+ &sys_ndb_query_cache_type,
+#endif
&sys_ndb_use_transactions,
#endif
&sys_unique_checks,
@@ -805,8 +810,9 @@ struct show_var_st init_vars[]= {
(char*) &sys_ndb_autoincrement_prefetch_sz, SHOW_SYS},
{sys_ndb_force_send.name, (char*) &sys_ndb_force_send, SHOW_SYS},
{sys_ndb_use_exact_count.name,(char*) &sys_ndb_use_exact_count, SHOW_SYS},
- {sys_ndb_use_local_query_cache.name,
- (char*) &sys_ndb_use_local_query_cache, SHOW_SYS},
+#ifdef HAVE_QUERY_CACHE
+ {sys_ndb_query_cache_type.name,(char*) &sys_ndb_query_cache_type, SHOW_SYS},
+#endif
{sys_ndb_use_transactions.name,(char*) &sys_ndb_use_transactions, SHOW_SYS},
#endif
{sys_net_buffer_length.name,(char*) &sys_net_buffer_length, SHOW_SYS},
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 1bf8d179770..da6998ded47 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -366,6 +366,12 @@ TYPELIB query_cache_type_typelib=
array_elements(query_cache_type_names)-1,"", query_cache_type_names, NULL
};
+const char *ndb_query_cache_type_names[]= { "OFF", "ON", "LOCAL",NullS };
+TYPELIB ndb_query_cache_type_typelib=
+{
+ array_elements(ndb_query_cache_type_names)-1,"", ndb_query_cache_type_names, NULL
+};
+
/*****************************************************************************
Query_cache_block_table method(s)
*****************************************************************************/
diff --git a/sql/sql_cache.h b/sql/sql_cache.h
index c933a2349af..b8cbc7953b8 100644
--- a/sql/sql_cache.h
+++ b/sql/sql_cache.h
@@ -412,6 +412,7 @@ protected:
};
extern Query_cache query_cache;
+extern TYPELIB ndb_query_cache_type_typelib;
extern TYPELIB query_cache_type_typelib;
void query_cache_end_of_result(THD *thd);
void query_cache_abort(NET *net);
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 06975730195..2ebad4b466a 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -403,7 +403,7 @@ struct system_variables
ulong ndb_autoincrement_prefetch_sz;
my_bool ndb_force_send;
my_bool ndb_use_exact_count;
- my_bool ndb_use_local_query_cache;
+ ulong ndb_query_cache_type;
my_bool ndb_use_transactions;
#endif /* HAVE_NDBCLUSTER_DB */
my_bool old_passwords;