diff options
author | unknown <brian@zim.(none)> | 2007-01-03 17:26:45 -0800 |
---|---|---|
committer | unknown <brian@zim.(none)> | 2007-01-03 17:26:45 -0800 |
commit | 20f0c7a65faf52136f47e809f855e5d500ad9a5b (patch) | |
tree | da45ed3f5a6f4370b7c05fb2e7d171f8f3257565 /storage | |
parent | 0968cc9dec13ddc3352eeff73aa8ebb3eecb0213 (diff) | |
download | mariadb-git-20f0c7a65faf52136f47e809f855e5d500ad9a5b.tar.gz |
Split out the hidden class from the ha_tina file (probably should have just deleted it...) but this is a bit better.
storage/csv/transparent_file.cc:
BitKeeper file /home/brian/mysql/merge-5.1/storage/csv/transparent_file.cc
storage/csv/transparent_file.h:
BitKeeper file /home/brian/mysql/merge-5.1/storage/csv/transparent_file.h
storage/csv/CMakeLists.txt:
Updated for windows
storage/csv/Makefile.am:
Updated to add new class
storage/csv/ha_tina.cc:
Removed hidden class
storage/csv/ha_tina.h:
Remove hidden class
Diffstat (limited to 'storage')
-rw-r--r-- | storage/csv/CMakeLists.txt | 2 | ||||
-rw-r--r-- | storage/csv/Makefile.am | 6 | ||||
-rw-r--r-- | storage/csv/ha_tina.cc | 48 | ||||
-rw-r--r-- | storage/csv/ha_tina.h | 44 | ||||
-rw-r--r-- | storage/csv/transparent_file.cc | 104 | ||||
-rw-r--r-- | storage/csv/transparent_file.h | 41 |
6 files changed, 150 insertions, 95 deletions
diff --git a/storage/csv/CMakeLists.txt b/storage/csv/CMakeLists.txt index 55e9b50fbfc..9088e2b7aa9 100644 --- a/storage/csv/CMakeLists.txt +++ b/storage/csv/CMakeLists.txt @@ -4,4 +4,4 @@ SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/regex ${CMAKE_SOURCE_DIR}/extra/yassl/include) -ADD_LIBRARY(csv ha_tina.cc ha_tina.h) +ADD_LIBRARY(csv ha_tina.cc ha_tina.h transparent_file.cc transparent_file.h) diff --git a/storage/csv/Makefile.am b/storage/csv/Makefile.am index e6bda138120..15ef5c71756 100644 --- a/storage/csv/Makefile.am +++ b/storage/csv/Makefile.am @@ -28,18 +28,18 @@ INCLUDES = -I$(top_builddir)/include \ LDADD = DEFS = @DEFS@ -noinst_HEADERS = ha_tina.h +noinst_HEADERS = ha_tina.h transparent_file.h EXTRA_LTLIBRARIES = ha_csv.la pkglib_LTLIBRARIES = @plugin_csv_shared_target@ ha_csv_la_LDFLAGS = -module -rpath $(MYSQLLIBdir) ha_csv_la_CXXFLAGS = $(AM_CFLAGS) -DMYSQL_PLUGIN -ha_csv_la_SOURCES = ha_tina.cc +ha_csv_la_SOURCES = transparent_file.cc ha_tina.cc EXTRA_LIBRARIES = libcsv.a noinst_LIBRARIES = @plugin_csv_static_target@ libcsv_a_CXXFLAGS = $(AM_CFLAGS) -libcsv_a_SOURCES = ha_tina.cc +libcsv_a_SOURCES = transparent_file.cc ha_tina.cc EXTRA_DIST = CMakeLists.txt plug.in # Don't update the files from bitkeeper diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc index b957bcef3ea..712c2d9d29a 100644 --- a/storage/csv/ha_tina.cc +++ b/storage/csv/ha_tina.cc @@ -77,54 +77,6 @@ static handler *tina_create_handler(handlerton *hton, MEM_ROOT *mem_root); -off_t Transparent_file::read_next() -{ - off_t bytes_read; - - /* - No need to seek here, as the file managed by Transparent_file class - always points to upper_bound byte - */ - if ((bytes_read= my_read(filedes, buff, buff_size, MYF(0))) == MY_FILE_ERROR) - return -1; - - /* end of file */ - if (!bytes_read) - return -1; - - lower_bound= upper_bound; - upper_bound+= bytes_read; - - return lower_bound; -} - - -char Transparent_file::get_value(off_t offset) -{ - off_t bytes_read; - - /* check boundaries */ - if ((lower_bound <= offset) && (offset < upper_bound)) - return buff[offset - lower_bound]; - else - { - VOID(my_seek(filedes, offset, MY_SEEK_SET, MYF(0))); - /* read appropriate portion of the file */ - if ((bytes_read= my_read(filedes, buff, buff_size, - MYF(0))) == MY_FILE_ERROR) - return 0; - - lower_bound= offset; - upper_bound= lower_bound + bytes_read; - - /* end of file */ - if (upper_bound == offset) - return 0; - - return buff[0]; - } -} - /***************************************************************************** ** TINA tables *****************************************************************************/ diff --git a/storage/csv/ha_tina.h b/storage/csv/ha_tina.h index 5068468fedf..0c667237c0f 100644 --- a/storage/csv/ha_tina.h +++ b/storage/csv/ha_tina.h @@ -16,6 +16,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <my_dir.h> +#include "transparent_file.h" #define DEFAULT_CHAIN_LENGTH 512 /* @@ -55,49 +56,6 @@ struct tina_set { off_t end; }; -class Transparent_file -{ - File filedes; - byte *buff; /* in-memory window to the file or mmaped area */ - /* current window sizes */ - off_t lower_bound; - off_t upper_bound; - uint buff_size; - - public: - - Transparent_file() : lower_bound(0), buff_size(IO_SIZE) - { buff= (byte *) my_malloc(buff_size*sizeof(byte), MYF(MY_WME)); } - - ~Transparent_file() - { my_free((gptr)buff, MYF(MY_ALLOW_ZERO_PTR)); } - - void init_buff(File filedes_arg) - { - filedes= filedes_arg; - /* read the beginning of the file */ - lower_bound= 0; - VOID(my_seek(filedes, 0, MY_SEEK_SET, MYF(0))); - if (filedes && buff) - upper_bound= my_read(filedes, buff, buff_size, MYF(0)); - } - - byte *ptr() - { return buff; } - - off_t start() - { return lower_bound; } - - off_t end() - { return upper_bound; } - - /* get a char from the given position in the file */ - char get_value (off_t offset); - /* shift a buffer windows to see the next part of the file */ - off_t read_next(); - -}; - class ha_tina: public handler { THR_LOCK_DATA lock; /* MySQL lock */ diff --git a/storage/csv/transparent_file.cc b/storage/csv/transparent_file.cc new file mode 100644 index 00000000000..27cc8c024b4 --- /dev/null +++ b/storage/csv/transparent_file.cc @@ -0,0 +1,104 @@ +/* Copyright (C) 2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef USE_PRAGMA_IMPLEMENTATION +#pragma implementation // gcc: Class implementation +#endif + +#include "mysql_priv.h" +#include "transparent_file.h" + +Transparent_file::Transparent_file() : lower_bound(0), buff_size(IO_SIZE) +{ + buff= (byte *) my_malloc(buff_size*sizeof(byte), MYF(MY_WME)); +} + +Transparent_file::~Transparent_file() +{ + my_free((gptr)buff, MYF(MY_ALLOW_ZERO_PTR)); +} + +void Transparent_file::init_buff(File filedes_arg) +{ + filedes= filedes_arg; + /* read the beginning of the file */ + lower_bound= 0; + VOID(my_seek(filedes, 0, MY_SEEK_SET, MYF(0))); + if (filedes && buff) + upper_bound= my_read(filedes, buff, buff_size, MYF(0)); +} + +byte *Transparent_file::ptr() +{ + return buff; +} + +off_t Transparent_file::start() +{ + return lower_bound; +} + +off_t Transparent_file::end() +{ + return upper_bound; +} + +off_t Transparent_file::read_next() +{ + off_t bytes_read; + + /* + No need to seek here, as the file managed by Transparent_file class + always points to upper_bound byte + */ + if ((bytes_read= my_read(filedes, buff, buff_size, MYF(0))) == MY_FILE_ERROR) + return -1; + + /* end of file */ + if (!bytes_read) + return -1; + + lower_bound= upper_bound; + upper_bound+= bytes_read; + + return lower_bound; +} + + +char Transparent_file::get_value(off_t offset) +{ + off_t bytes_read; + + /* check boundaries */ + if ((lower_bound <= offset) && (offset < upper_bound)) + return buff[offset - lower_bound]; + else + { + VOID(my_seek(filedes, offset, MY_SEEK_SET, MYF(0))); + /* read appropriate portion of the file */ + if ((bytes_read= my_read(filedes, buff, buff_size, + MYF(0))) == MY_FILE_ERROR) + return 0; + + lower_bound= offset; + upper_bound= lower_bound + bytes_read; + + /* end of file */ + if (upper_bound == offset) + return 0; + + return buff[0]; + } +} diff --git a/storage/csv/transparent_file.h b/storage/csv/transparent_file.h new file mode 100644 index 00000000000..ceb59ec7caf --- /dev/null +++ b/storage/csv/transparent_file.h @@ -0,0 +1,41 @@ +/* Copyright (C) 2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <my_dir.h> + + +class Transparent_file +{ + File filedes; + byte *buff; /* in-memory window to the file or mmaped area */ + /* current window sizes */ + off_t lower_bound; + off_t upper_bound; + uint buff_size; + +public: + + Transparent_file(); + ~Transparent_file(); + + void init_buff(File filedes_arg); + byte *ptr(); + off_t start(); + off_t end(); + char get_value (off_t offset); + off_t read_next(); +}; |