mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 19:41:47 +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
91 lines
3.4 KiB
C++
91 lines
3.4 KiB
C++
/************** FilAMFix H Declares Source Code File (.H) **************/
|
|
/* Name: FILAMFIX.H Version 1.3 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2005 - 2014 */
|
|
/* */
|
|
/* This file contains the FIX file access method classes declares. */
|
|
/***********************************************************************/
|
|
|
|
#ifndef __FILAMFIX_H
|
|
#define __FILAMFIX_H
|
|
|
|
#include "filamtxt.h"
|
|
|
|
typedef class FIXFAM *PFIXFAM;
|
|
typedef class BGXFAM *PBGXFAM;
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for standard */
|
|
/* files with fixed record format (FIX, BIN) */
|
|
/***********************************************************************/
|
|
class DllExport FIXFAM : public BLKFAM {
|
|
public:
|
|
// Constructor
|
|
FIXFAM(PDOSDEF tdp);
|
|
FIXFAM(PFIXFAM txfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_FIX;}
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) FIXFAM(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 Fpos + 1;}
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual void ResetBuffer(PGLOBAL g);
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual int DeleteRecords(PGLOBAL g, int irc);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
|
|
protected:
|
|
virtual bool CopyHeader(PGLOBAL g) {return false;}
|
|
virtual bool MoveIntermediateLines(PGLOBAL g, bool *b);
|
|
virtual int InitDelete(PGLOBAL g, int fpos, int spos);
|
|
|
|
// No additional members
|
|
}; // end of class FIXFAM
|
|
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for files */
|
|
/* that are standard files with columns starting at fixed offset */
|
|
/* This class is for fixed formatted files of more than 2 gigabytes. */
|
|
/***********************************************************************/
|
|
class BGXFAM : public FIXFAM {
|
|
public:
|
|
// Constructor
|
|
BGXFAM(PDOSDEF tdp);
|
|
BGXFAM(PBGXFAM txfp);
|
|
|
|
// Implementation
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) BGXFAM(this);}
|
|
|
|
// Methods
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual bool OpenTableFile(PGLOBAL g);
|
|
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 bool OpenTempFile(PGLOBAL g);
|
|
virtual bool MoveIntermediateLines(PGLOBAL g, bool *b = NULL);
|
|
int BigRead(PGLOBAL g, HANDLE h, void *inbuf, int req);
|
|
bool BigWrite(PGLOBAL g, HANDLE h, void *inbuf, int req);
|
|
bool BigSeek(PGLOBAL g, HANDLE h, BIGINT pos
|
|
, int org = FILE_BEGIN);
|
|
|
|
// Members
|
|
HANDLE Hfile; // Handle(descriptor) to big file
|
|
HANDLE Tfile; // Handle(descriptor) to big temp file
|
|
}; // end of class BGXFAM
|
|
|
|
#endif // __FILAMFIX_H
|