Split out the hidden class from the ha_tina file (probably should have just deleted it...) but this is a bit better.
This commit is contained in:
parent
7b9a5f6de2
commit
6ff7092698
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
*****************************************************************************/
|
||||
|
@ -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 */
|
||||
|
104
storage/csv/transparent_file.cc
Normal file
104
storage/csv/transparent_file.cc
Normal file
@ -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];
|
||||
}
|
||||
}
|
41
storage/csv/transparent_file.h
Normal file
41
storage/csv/transparent_file.h
Normal file
@ -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();
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user