fixed invalidation of query cache

excluded double call of 'invalidate()'


mysql-test/r/innodb_cache.result:
  test of invalidation
mysql-test/t/innodb_cache.test:
  test of invalidation
sql/handler.cc:
  excluded double call of 'invalidate()'
sql/sql_delete.cc:
  fixed invalidation of query cache
sql/sql_insert.cc:
  fixed invalidation of query cache
sql/sql_update.cc:
  fixed invalidation of query cache
This commit is contained in:
unknown 2002-11-22 00:33:15 +02:00
parent 910849ccd1
commit 03ac294cce
6 changed files with 30 additions and 20 deletions

View file

@ -98,3 +98,13 @@ commit;
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
drop table if exists t1;
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=InnoDB;
select count(*) from t1;
count(*)
0
insert into t1 (id) values (0);
select count(*) from t1;
count(*)
1
drop table t1;

View file

@ -47,4 +47,11 @@ select * from t3;
show status like "Qcache_queries_in_cache";
show status like "Qcache_hits";
commit;
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
drop table if exists t1;
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=InnoDB;
select count(*) from t1;
insert into t1 (id) values (0);
select count(*) from t1;
drop table t1;

View file

@ -314,7 +314,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans)
}
#endif
#ifdef HAVE_QUERY_CACHE
if (transaction_commited)
if (transaction_commited && thd->transaction.changed_tables)
query_cache.invalidate(thd->transaction.changed_tables);
#endif /*HAVE_QUERY_CACHE*/
if (error && trans == &thd->transaction.all && mysql_bin_log.is_open())

View file

@ -179,14 +179,12 @@ cleanup:
if (ha_autocommit_or_rollback(thd,error >= 0))
error=1;
}
/*
Only invalidate the query cache if something changed or if we
didn't commit the transacion (query cache is automaticly
invalidated on commit)
Store table for future invalidation or invalidate it in
the query cache if something changed
*/
if (deleted &&
(!transactional_table ||
thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
if (deleted)
{
query_cache_invalidate3(thd, table_list, 1);
}

View file

@ -319,13 +319,10 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
error=ha_autocommit_or_rollback(thd,error);
/*
Only invalidate the query cache if something changed or if we
didn't commit the transacion (query cache is automaticly
invalidated on commit)
Store table for future invalidation or invalidate it in
the query cache if something changed
*/
if ((info.copied || info.deleted) &&
(!transactional_table ||
thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
if (info.copied || info.deleted)
{
query_cache_invalidate3(thd, table_list, 1);
}

View file

@ -318,14 +318,12 @@ int mysql_update(THD *thd,
if (ha_autocommit_or_rollback(thd, error >= 0))
error=1;
}
/*
Only invalidate the query cache if something changed or if we
didn't commit the transacion (query cache is automaticly
invalidated on commit)
Store table for future invalidation or invalidate it in
the query cache if something changed
*/
if (updated &&
(!transactional_table ||
thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
if (updated)
{
query_cache_invalidate3(thd, table_list, 1);
}