diff options
author | unknown <sanja@askmonty.org> | 2009-10-06 09:57:22 +0300 |
---|---|---|
committer | unknown <sanja@askmonty.org> | 2009-10-06 09:57:22 +0300 |
commit | 0c0e1f2e351923c2fecdf38641734ec796ec9c15 (patch) | |
tree | 96d00264d97a8b622eb19cb950aa2341a6d62177 /storage/myisam | |
parent | d50e99c9f63d3cd46fdde0e95072117759c7e852 (diff) | |
download | mariadb-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.cc | 3 | ||||
-rw-r--r-- | storage/myisam/mi_locking.c | 6 | ||||
-rw-r--r-- | storage/myisam/myisamdef.h | 5 |
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 */ |