diff options
author | monty@tramp.mysql.fi <> | 2000-09-26 00:33:25 +0300 |
---|---|---|
committer | monty@tramp.mysql.fi <> | 2000-09-26 00:33:25 +0300 |
commit | e32799e4ddeb03362d5740ac4f3ce5a9e4627ea0 (patch) | |
tree | 047c90e932cb7b90a58fe795b855351027725c29 /sql/mf_iocache.cc | |
parent | 50486eeb807aefb8af2e03636544fd167ded7f00 (diff) | |
download | mariadb-git-e32799e4ddeb03362d5740ac4f3ce5a9e4627ea0.tar.gz |
RIGHT JOIN, part of automatic repair of MyISAM tables, backup on repair,
reading from FIFO, fixes for FULLTEXT, @@IDENTITY
Diffstat (limited to 'sql/mf_iocache.cc')
-rw-r--r-- | sql/mf_iocache.cc | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc index e5ecc4bb428..49df40adaf6 100644 --- a/sql/mf_iocache.cc +++ b/sql/mf_iocache.cc @@ -94,13 +94,15 @@ int init_io_cache(IO_CACHE *info, File file, uint cachesize, } else info->buffer=0; + DBUG_PRINT("info",("init_io_cache: cachesize = %u",cachesize)); info->pos_in_file= seek_offset; info->read_length=info->buffer_length=cachesize; - info->seek_not_done=test(file >= 0); /* Seek not done */ + info->seek_not_done= test(file >= 0 && type != READ_FIFO && + type != READ_NET); info->myflags=cache_myflags & ~(MY_NABP | MY_FNABP); info->rc_request_pos=info->rc_pos=info->buffer; - if (type == READ_CACHE || type == READ_NET) /* the same logic */ + if (type == READ_CACHE || type == READ_NET || type == READ_FIFO) { info->rc_end=info->buffer; /* Nothing in cache */ } @@ -108,7 +110,9 @@ int init_io_cache(IO_CACHE *info, File file, uint cachesize, { info->rc_end=info->buffer+info->buffer_length- (seek_offset & (IO_SIZE-1)); } - info->end_of_file=(type == READ_NET) ? 0 : MY_FILEPOS_ERROR; /* May be changed by user */ + /* end_of_file may be changed by user later */ + info->end_of_file= ((type == READ_NET || type == READ_FIFO ) ? 0 + : MY_FILEPOS_ERROR); info->type=type; info->error=0; info->read_function=(type == READ_NET) ? _my_b_net_read : _my_b_read; /* net | file */ @@ -187,7 +191,7 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, DBUG_RETURN(1); info->pos_in_file=seek_offset; info->rc_request_pos=info->rc_pos=info->buffer; - if (type == READ_CACHE || type == READ_NET) + if (type == READ_CACHE || type == READ_NET || type == READ_FIFO) { info->rc_end=info->buffer; /* Nothing in cache */ } @@ -195,7 +199,8 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, { info->rc_end=info->buffer+info->buffer_length- (seek_offset & (IO_SIZE-1)); - info->end_of_file=(type == READ_NET) ? 0 : MY_FILEPOS_ERROR; + info->end_of_file= ((type == READ_NET || type == READ_FIFO) ? 0 : + MY_FILEPOS_ERROR); } } info->type=type; @@ -259,9 +264,10 @@ int _my_b_read(register IO_CACHE *info, byte *Buffer, uint Count) left_length+=length; diff_length=0; } - max_length=info->end_of_file - pos_in_file; - if (max_length > info->read_length-diff_length) - max_length=info->read_length-diff_length; + max_length=info->read_length-diff_length; + if (info->type != READ_FIFO && + (info->end_of_file - pos_in_file) < max_length) + max_length = info->end_of_file - pos_in_file; if (!max_length) { if (Count) |