mf_iocache.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.   Cashing of files with only does (sequential) read or writes of fixed-
  15.   length records. A read isn't allowed to go over file-length. A read is ok
  16.   if it ends at file-length and next read can try to read after file-length
  17.   (and get a EOF-error).
  18.   Possibly use of asyncronic io.
  19.   macros for read and writes for faster io.
  20.   Used instead of FILE when reading or writing whole files.
  21.   This will make mf_rec_cache obsolete.
  22.   One can change info->pos_in_file to a higher value to skip bytes in file if
  23.   also info->rc_pos is set to info->rc_end.
  24.   If called through open_cached_file(), then the temporary file will
  25.   only be created if a write exeeds the file buffer or if one calls
  26.   flush_io_cache().  
  27. */
  28. #include "mysql_priv.h"
  29. #ifdef HAVE_REPLICATION
  30. extern "C" {
  31. /*
  32. ** Read buffered from the net.
  33. ** Returns 1 if can't read requested characters
  34. ** Returns 0 if record read
  35. */
  36. int _my_b_net_read(register IO_CACHE *info, byte *Buffer,
  37.    uint Count __attribute__((unused)))
  38. {
  39.   ulong read_length;
  40.   NET *net= &(current_thd)->net;
  41.   DBUG_ENTER("_my_b_net_read");
  42.   if (!info->end_of_file)
  43.     DBUG_RETURN(1); /* because my_b_get (no _) takes 1 byte at a time */
  44.   read_length=my_net_read(net);
  45.   if (read_length == packet_error)
  46.   {
  47.     info->error= -1;
  48.     DBUG_RETURN(1);
  49.   }
  50.   if (read_length == 0)
  51.   {
  52.     info->end_of_file= 0; /* End of file from client */
  53.     DBUG_RETURN(1);
  54.   }
  55.   /* to set up stuff for my_b_get (no _) */
  56.   info->read_end = (info->read_pos = (byte*) net->read_pos) + read_length;
  57.   Buffer[0] = info->read_pos[0]; /* length is always 1 */
  58.   /*
  59.     info->request_pos is used by log_loaded_block() to know the size
  60.     of the current block.
  61.     info->pos_in_file is used by log_loaded_block() too.
  62.   */
  63.   info->pos_in_file+= read_length;
  64.   info->request_pos=info->read_pos;
  65.   info->read_pos++;
  66.   DBUG_RETURN(0);
  67. }
  68. } /* extern "C" */
  69. #endif /* HAVE_REPLICATION */