mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.0
into sanja.is.com.ua:/home/bell/mysql/bk/work-qc-4.0
This commit is contained in:
commit
e632fa7d4c
3 changed files with 41 additions and 8 deletions
|
@ -365,16 +365,23 @@ insert into mysqltest.t1 (a) values (1);
|
||||||
select * from mysqltest.t1 where i is null;
|
select * from mysqltest.t1 where i is null;
|
||||||
i a
|
i a
|
||||||
1 1
|
1 1
|
||||||
|
create table t1(a int);
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
Variable_name Value
|
||||||
|
Qcache_queries_in_cache 1
|
||||||
select * from mysqltest.t1;
|
select * from mysqltest.t1;
|
||||||
i a
|
i a
|
||||||
1 1
|
1 1
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 1
|
Qcache_queries_in_cache 2
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 0
|
Qcache_queries_in_cache 1
|
||||||
|
drop table t1;
|
||||||
create table t1 (a char(1) not null);
|
create table t1 (a char(1) not null);
|
||||||
insert into t1 values("á");
|
insert into t1 values("á");
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
|
|
@ -251,10 +251,14 @@ select * from mysqltest.t1 where i is null;
|
||||||
#
|
#
|
||||||
# drop db
|
# drop db
|
||||||
#
|
#
|
||||||
|
create table t1(a int);
|
||||||
|
select * from t1;
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
select * from mysqltest.t1;
|
select * from mysqltest.t1;
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Charset convertion (cp1251_koi8 always present)
|
# Charset convertion (cp1251_koi8 always present)
|
||||||
|
|
|
@ -1151,9 +1151,29 @@ void Query_cache::invalidate(char *db)
|
||||||
if (query_cache_size > 0)
|
if (query_cache_size > 0)
|
||||||
{
|
{
|
||||||
DUMP(this);
|
DUMP(this);
|
||||||
/* invalidate_table reduce list while only root of list remain */
|
restart_search:
|
||||||
while (tables_blocks !=0 )
|
if (tables_blocks)
|
||||||
invalidate_table(tables_blocks);
|
{
|
||||||
|
Query_cache_block *curr= tables_blocks;
|
||||||
|
Query_cache_block *next;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
next= curr->next;
|
||||||
|
if (strcmp(db, (char*)(curr->table()->db())) == 0)
|
||||||
|
invalidate_table(curr);
|
||||||
|
/*
|
||||||
|
invalidate_table can freed block on which point 'next' (if
|
||||||
|
table of this block used only in queries which was deleted
|
||||||
|
by invalidate_table). As far as we do not allocate new blocks
|
||||||
|
and mark all headers of freed blocks as 'FREE' (even if they are
|
||||||
|
merged with other blocks) we can just test type of block
|
||||||
|
to be sure that block is not deleted
|
||||||
|
*/
|
||||||
|
if (next->type == Query_cache_block::FREE)
|
||||||
|
goto restart_search;
|
||||||
|
curr= next;
|
||||||
|
} while (curr != tables_blocks);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
STRUCT_UNLOCK(&structure_guard_mutex);
|
STRUCT_UNLOCK(&structure_guard_mutex);
|
||||||
}
|
}
|
||||||
|
@ -2158,9 +2178,11 @@ void Query_cache::free_memory_block(Query_cache_block *block)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Query_cache::free_memory_block");
|
DBUG_ENTER("Query_cache::free_memory_block");
|
||||||
block->used=0;
|
block->used=0;
|
||||||
DBUG_PRINT("qcache",("first_block 0x%lx, block 0x%lx, pnext 0x%lx pprev 0x%lx",
|
block->type= Query_cache_block::FREE; // mark block as free in any case
|
||||||
(ulong) first_block, (ulong) block,block->pnext,
|
DBUG_PRINT("qcache",
|
||||||
(ulong) block->pprev));
|
("first_block 0x%lx, block 0x%lx, pnext 0x%lx pprev 0x%lx",
|
||||||
|
(ulong) first_block, (ulong) block,block->pnext,
|
||||||
|
(ulong) block->pprev));
|
||||||
|
|
||||||
if (block->pnext != first_block && block->pnext->is_free())
|
if (block->pnext != first_block && block->pnext->is_free())
|
||||||
block = join_free_blocks(block, block->pnext);
|
block = join_free_blocks(block, block->pnext);
|
||||||
|
|
Loading…
Reference in a new issue