Fix for bug #35392: Delete all statement does not execute properly
after few delete statements Problem: changing a file size might require that it must be unmapped beforehand. Fix: unmap the file before changing its size.
This commit is contained in:
parent
ab82eca67c
commit
f538288bca
@ -184,3 +184,14 @@ select * from t1;
|
||||
a
|
||||
42
|
||||
drop table t1;
|
||||
CREATE TEMPORARY TABLE t1(a INT, b VARCHAR(20));
|
||||
INSERT INTO t1 VALUES(1, 'val1'), (2, 'val2'), (3, 'val3');
|
||||
DELETE FROM t1 WHERE a=1;
|
||||
SELECT count(*) FROM t1;
|
||||
count(*)
|
||||
2
|
||||
DELETE FROM t1;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
@ -191,3 +191,17 @@ truncate t1;
|
||||
insert into t1 values (42);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #35392: Delete all statement does not execute properly after
|
||||
# few delete statements
|
||||
#
|
||||
CREATE TEMPORARY TABLE t1(a INT, b VARCHAR(20));
|
||||
INSERT INTO t1 VALUES(1, 'val1'), (2, 'val2'), (3, 'val3');
|
||||
DELETE FROM t1 WHERE a=1;
|
||||
SELECT count(*) FROM t1;
|
||||
DELETE FROM t1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -53,15 +53,18 @@ int mi_delete_all_rows(MI_INFO *info)
|
||||
since it was locked then there may be key blocks in the key cache
|
||||
*/
|
||||
flush_key_blocks(share->key_cache, share->kfile, FLUSH_IGNORE_CHANGED);
|
||||
#ifdef HAVE_MMAP
|
||||
if (share->file_map)
|
||||
_mi_unmap_file(info);
|
||||
#endif
|
||||
if (my_chsize(info->dfile, 0, 0, MYF(MY_WME)) ||
|
||||
my_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME)) )
|
||||
goto err;
|
||||
VOID(_mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE));
|
||||
#ifdef HAVE_MMAP
|
||||
/* Resize mmaped area */
|
||||
rw_wrlock(&info->s->mmap_lock);
|
||||
mi_remap_file(info, (my_off_t)0);
|
||||
rw_unlock(&info->s->mmap_lock);
|
||||
/* Map again */
|
||||
if (share->file_map)
|
||||
mi_dynmap_file(info, (my_off_t) 0);
|
||||
#endif
|
||||
allow_break(); /* Allow SIGHUP & SIGINT */
|
||||
DBUG_RETURN(0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user