summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <monty@tik.mysql.com>2000-10-15 18:45:53 +0300
committerunknown <monty@tik.mysql.com>2000-10-15 18:45:53 +0300
commitd78f9840978cf60b73f13f6a5201ed5593636573 (patch)
tree51edb97a7ba1e486acf5bdba590984b73c775b29 /myisam
parent31ed959ba37ae81b9b0eb2079f1576f34f1241c7 (diff)
downloadmariadb-git-d78f9840978cf60b73f13f6a5201ed5593636573.tar.gz
Changed meaning of HA_EXTRA_RESET and start of hidden primary keys for BDB tables
heap/hp_extra.c: Changed meaning of HA_EXTRA_RESET include/my_base.h: Added HA_EXTRA_RESET_STATE isam/extra.c: Changed meaning of HA_EXTRA_RESET isam/pack_isam.c: Addapt to changed HA_EXTRA_RESET merge/extra.c: Changed meaning of HA_EXTRA_RESET myisam/mi_extra.c: Changed meaning of HA_EXTRA_RESET myisam/myisampack.c: Addapt to changed HA_EXTRA_RESET myisammrg/myrg_extra.c: Addapt to changed HA_EXTRA_RESET sql/filesort.cc: Addapt to changed HA_EXTRA_RESET sql/ha_berkeley.cc: Hidden primary key sql/ha_berkeley.h: Hidden primary key BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'myisam')
-rw-r--r--myisam/mi_extra.c18
-rw-r--r--myisam/myisampack.c4
2 files changed, 20 insertions, 2 deletions
diff --git a/myisam/mi_extra.c b/myisam/mi_extra.c
index b90b5b35780..eaf9400babe 100644
--- a/myisam/mi_extra.c
+++ b/myisam/mi_extra.c
@@ -37,6 +37,24 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function)
switch (function) {
case HA_EXTRA_RESET:
+ /*
+ Free buffers and reset the following flags:
+ EXTRA_CACHE, EXTRA_WRITE_CACHE, EXTRA_KEYREAD, EXTRA_QUICK
+ */
+ if (info->opt_flag & (READ_CACHE_USED | WRITE_CACHE_USED))
+ {
+ info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
+ error=end_io_cache(&info->rec_cache);
+ }
+#if defined(HAVE_MMAP) && defined(HAVE_MADVICE)
+ if (info->opt_flag & MEMMAP_USED)
+ madvise(share->file_map,share->state.state.data_file_length,MADV_RANDOM);
+#endif
+ info->opt_flag&= ~(KEY_READ_USED | REMEMBER_OLD_POS);
+ info->quick_mode=0;
+ /* Fall through */
+
+ case HA_EXTRA_RESET_STATE: /* Reset state (don't free buffers) */
info->lastinx= 0; /* Use first index as def */
info->last_search_keypage=info->lastpos= HA_OFFSET_ERROR;
info->page_changed=1;
diff --git a/myisam/myisampack.c b/myisam/myisampack.c
index fbb543152f8..ef9be13687e 100644
--- a/myisam/myisampack.c
+++ b/myisam/myisampack.c
@@ -2104,8 +2104,8 @@ static int mrg_rrnd(MRG_INFO *info,byte *buf)
{
isam_info= *(info->current=info->file);
info->end=info->current+info->count;
- mi_extra(isam_info,HA_EXTRA_CACHE);
mi_extra(isam_info,HA_EXTRA_RESET);
+ mi_extra(isam_info,HA_EXTRA_CACHE);
filepos=isam_info->s->pack.header_length;
}
else
@@ -2127,8 +2127,8 @@ static int mrg_rrnd(MRG_INFO *info,byte *buf)
info->current++;
isam_info= *info->current;
filepos=isam_info->s->pack.header_length;
- mi_extra(isam_info,HA_EXTRA_CACHE);
mi_extra(isam_info,HA_EXTRA_RESET);
+ mi_extra(isam_info,HA_EXTRA_CACHE);
}
}