mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
3a69c854c5
them sorted by file position. Firstly a new value is stored in indexes to know if they are sorted, preventing to do the sorting when it is not needed. Secondly, almost all in now done in connect instead of being done by the different file access method classes. This pepares the future use of temporary files for all table types and also fix the bug that was occuring when partially using a multi-column index because of false MRR like call of position followed by unsorted rnd_pos no more using indexing. modified: storage/connect/connect.cc storage/connect/filamap.cpp storage/connect/filamap.h storage/connect/filamdbf.cpp storage/connect/filamdbf.h storage/connect/filamfix.cpp storage/connect/filamfix.h storage/connect/filamtxt.cpp storage/connect/filamtxt.h storage/connect/filamvct.cpp storage/connect/filamvct.h storage/connect/tabdos.cpp storage/connect/tabdos.h storage/connect/tabfix.h storage/connect/tabfmt.cpp storage/connect/tabfmt.h storage/connect/xindex.cpp storage/connect/xindex.h storage/connect/xtable.h
118 lines
4.2 KiB
C++
118 lines
4.2 KiB
C++
/*************** FilAMap H Declares Source Code File (.H) **************/
|
|
/* Name: FILAMAP.H Version 1.3 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2005-2014 */
|
|
/* */
|
|
/* This file contains the MAP file access method classes declares. */
|
|
/***********************************************************************/
|
|
#ifndef __FILAMAP_H
|
|
#define __FILAMAP_H
|
|
|
|
#include "block.h"
|
|
#include "filamtxt.h"
|
|
|
|
typedef class MAPFAM *PMAPFAM;
|
|
|
|
/***********************************************************************/
|
|
/* This is the variable file access method using file mapping. */
|
|
/***********************************************************************/
|
|
class DllExport MAPFAM : public TXTFAM {
|
|
public:
|
|
// Constructor
|
|
MAPFAM(PDOSDEF tdp);
|
|
MAPFAM(PMAPFAM tmfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_MAP;}
|
|
virtual int GetPos(void);
|
|
virtual int GetNextPos(void);
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) MAPFAM(this);}
|
|
|
|
// Methods
|
|
virtual void Reset(void);
|
|
virtual int GetFileLength(PGLOBAL g);
|
|
virtual int Cardinality(PGLOBAL g) {return (g) ? -1 : 0;}
|
|
virtual int MaxBlkSize(PGLOBAL g, int s) {return s;}
|
|
virtual int GetRowID(void);
|
|
virtual bool RecordPos(PGLOBAL g);
|
|
virtual bool SetPos(PGLOBAL g, int recpos);
|
|
virtual int SkipRecord(PGLOBAL g, bool header);
|
|
virtual bool OpenTableFile(PGLOBAL g);
|
|
virtual bool DeferReading(void) {return false;}
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual int DeleteRecords(PGLOBAL g, int irc);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
virtual void Rewind(void);
|
|
|
|
protected:
|
|
virtual int InitDelete(PGLOBAL g, int fpos, int spos);
|
|
|
|
// Members
|
|
char *Memory; // Pointer on file mapping view.
|
|
char *Mempos; // Position of next data to read
|
|
char *Fpos; // Position of last read record
|
|
char *Tpos; // Target Position for delete move
|
|
char *Spos; // Start position for delete move
|
|
char *Top; // Mark end of file mapping view
|
|
}; // end of class MAPFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the blocked file access method using file mapping. */
|
|
/***********************************************************************/
|
|
class DllExport MBKFAM : public MAPFAM {
|
|
public:
|
|
// Constructor
|
|
MBKFAM(PDOSDEF tdp);
|
|
MBKFAM(PMAPFAM tmfp) : MAPFAM(tmfp) {}
|
|
|
|
// Implementation
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) MBKFAM(this);}
|
|
|
|
// Methods
|
|
virtual void Reset(void);
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual int MaxBlkSize(PGLOBAL g, int s)
|
|
{return TXTFAM::MaxBlkSize(g, s);}
|
|
virtual int GetRowID(void);
|
|
virtual int SkipRecord(PGLOBAL g, bool header);
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual void Rewind(void);
|
|
|
|
protected:
|
|
// No additional members
|
|
}; // end of class MBKFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the fixed file access method using file mapping. */
|
|
/***********************************************************************/
|
|
class DllExport MPXFAM : public MBKFAM {
|
|
public:
|
|
// Constructor
|
|
MPXFAM(PDOSDEF tdp);
|
|
MPXFAM(PMAPFAM tmfp) : MBKFAM(tmfp) {}
|
|
|
|
// Implementation
|
|
virtual int GetPos(void);
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) MPXFAM(this);}
|
|
|
|
// Methods
|
|
virtual int Cardinality(PGLOBAL g) {return TXTFAM::Cardinality(g);}
|
|
virtual int MaxBlkSize(PGLOBAL g, int s)
|
|
{return TXTFAM::MaxBlkSize(g, s);}
|
|
virtual bool SetPos(PGLOBAL g, int recpos);
|
|
virtual int GetNextPos(void) {return (int)Fpos + Nrec;}
|
|
virtual bool DeferReading(void) {return false;}
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
|
|
protected:
|
|
virtual int InitDelete(PGLOBAL g, int fpos, int spos);
|
|
|
|
// No additional members
|
|
}; // end of class MPXFAM
|
|
|
|
#endif // __FILAMAP_H
|