summaryrefslogtreecommitdiff
path: root/storage/myisam
diff options
context:
space:
mode:
authorunknown <sanja@askmonty.org>2009-10-06 09:57:22 +0300
committerunknown <sanja@askmonty.org>2009-10-06 09:57:22 +0300
commit0c0e1f2e351923c2fecdf38641734ec796ec9c15 (patch)
tree96d00264d97a8b622eb19cb950aa2341a6d62177 /storage/myisam
parentd50e99c9f63d3cd46fdde0e95072117759c7e852 (diff)
downloadmariadb-git-0c0e1f2e351923c2fecdf38641734ec796ec9c15.tar.gz
BUG#39249 Maria:query cache returns out of date results
BUG#41098 Query Cache returns wrong result with concurent insert BUILD/SETUP.sh: test build without query cache setup BUILD/compile-pentium-debug-max-no-qc: test build without query cache sql/mysql_priv.h: removed double declaration storage/maria/ha_maria.cc: query cache invalidation fixed storage/maria/ma_state.c: query cache invalidation fixed storage/maria/maria_def.h: last transaction ID added invalidation fixed storage/myisam/ha_myisam.cc: invalidation fixed storage/myisam/mi_locking.c: invalidation fixed storage/myisam/myisamdef.h: invalidation fixed
Diffstat (limited to 'storage/myisam')
-rw-r--r--storage/myisam/ha_myisam.cc3
-rw-r--r--storage/myisam/mi_locking.c6
-rw-r--r--storage/myisam/myisamdef.h5
3 files changed, 13 insertions, 1 deletions
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index 160e6dfed6c..39c157f2e64 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -660,6 +660,9 @@ int ha_myisam::open(const char *name, int mode, uint test_if_locked)
if (!(file=mi_open(name, mode, test_if_locked | HA_OPEN_FROM_SQL_LAYER)))
return (my_errno ? my_errno : -1);
+
+ file->s->chst_invalidator= query_cache_invalidate_by_MyISAM_filename_ref;
+
if (!table->s->tmp_table) /* No need to perform a check for tmp table */
{
if ((my_errno= table2myisam(table, &keyinfo, &recinfo, &recs)))
diff --git a/storage/myisam/mi_locking.c b/storage/myisam/mi_locking.c
index ebee8826c3b..b935d517c81 100644
--- a/storage/myisam/mi_locking.c
+++ b/storage/myisam/mi_locking.c
@@ -329,6 +329,12 @@ void mi_update_status(void* param)
#endif
info->s->state.state= *info->state;
info->state= &info->s->state.state;
+#ifdef HAVE_QUERY_CACHE
+ DBUG_PRINT("info", ("invalidator... '%s' (status update)",
+ info->filename));
+ DBUG_ASSERT(info->s->chst_invalidator != NULL);
+ (*info->s->chst_invalidator)((const char *)info->filename);
+#endif
}
info->append_insert_at_end= 0;
diff --git a/storage/myisam/myisamdef.h b/storage/myisam/myisamdef.h
index f311202e47a..c2841c49199 100644
--- a/storage/myisam/myisamdef.h
+++ b/storage/myisam/myisamdef.h
@@ -190,7 +190,10 @@ typedef struct st_mi_isam_share
const uchar *record, my_off_t pos);
size_t (*file_read) (MI_INFO *, uchar *, size_t, my_off_t, myf);
size_t (*file_write) (MI_INFO *, const uchar *, size_t, my_off_t, myf);
- invalidator_by_filename invalidator; /* query cache invalidator */
+ /* query cache invalidator for merged tables */
+ invalidator_by_filename invalidator;
+ /* query cache invalidator for changing state */
+ invalidator_by_filename chst_invalidator;
ulong this_process; /* processid */
ulong last_process; /* For table-change-check */
ulong last_version; /* Version on start */