summaryrefslogtreecommitdiff
path: root/sql/ha_partition.h
diff options
context:
space:
mode:
authorMattias Jonsson <mattias.jonsson@oracle.com>2012-02-20 22:59:11 +0100
committerMattias Jonsson <mattias.jonsson@oracle.com>2012-02-20 22:59:11 +0100
commit74374933c8db3c7f1de07ced89ce72dd705576b3 (patch)
tree0efb009bb711ac428314e103e8833b082a31f451 /sql/ha_partition.h
parent2a6a6abb70202e94eb0b6eec62f7bdde25d8a68b (diff)
downloadmariadb-git-74374933c8db3c7f1de07ced89ce72dd705576b3.tar.gz
Bug#11761296: 53775: QUERY ON PARTITIONED TABLE RETURNS CACHED
RESULT FROM PREVIOUS TRANSACTION The current Query Cache API is not fully compatible with the partitioning engine. There is no good way to implement support for QC due to: 1) a static callback for ha_partition would need to have access to all partition names and call the underlying callback for each [sub]partition with the correct name. 2) pruning would be impossible, even if one used the ulonglong engine_data due to if engine_data is changed, the table is invalidated by the QC. So the only viable solution to avoid incorrect data is to not allow caching of queries using partitioned tables. (There are some extra changes, due to removal of \r as line break)
Diffstat (limited to 'sql/ha_partition.h')
-rw-r--r--sql/ha_partition.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/sql/ha_partition.h b/sql/ha_partition.h
index 46e2f447a47..813c0ae8960 100644
--- a/sql/ha_partition.h
+++ b/sql/ha_partition.h
@@ -219,9 +219,9 @@ public:
*/
ha_partition(handlerton *hton, TABLE_SHARE * table);
ha_partition(handlerton *hton, partition_info * part_info);
- ha_partition(handlerton *hton, TABLE_SHARE *share,
- partition_info *part_info_arg,
- ha_partition *clone_arg,
+ ha_partition(handlerton *hton, TABLE_SHARE *share,
+ partition_info *part_info_arg,
+ ha_partition *clone_arg,
MEM_ROOT *clone_mem_root_arg);
~ha_partition();
/*
@@ -553,6 +553,20 @@ public:
virtual int extra(enum ha_extra_function operation);
virtual int extra_opt(enum ha_extra_function operation, ulong cachesize);
virtual int reset(void);
+ /*
+ Do not allow caching of partitioned tables, since we cannot return
+ a callback or engine_data that would work for a generic engine.
+ */
+ virtual my_bool register_query_cache_table(THD *thd, char *table_key,
+ uint key_length,
+ qc_engine_callback
+ *engine_callback,
+ ulonglong *engine_data)
+ {
+ *engine_callback= NULL;
+ *engine_data= 0;
+ return FALSE;
+ }
private:
static const uint NO_CURRENT_PART_ID;