mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
db0c28eff8
Find and fix missing virtual override markings. Updates cmake maintainer flags to include -Wsuggest-override and -Winconsistent-missing-override.
269 lines
12 KiB
C++
269 lines
12 KiB
C++
/*************** TabDos H Declares Source Code File (.H) ***************/
|
|
/* Name: TABDOS.H Version 3.3 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 1999-2015 */
|
|
/* */
|
|
/* This file contains the DOS classes declares. */
|
|
/***********************************************************************/
|
|
|
|
#ifndef __TABDOS_H
|
|
#define __TABDOS_H
|
|
|
|
#include "xtable.h" // Table base class declares
|
|
#include "colblk.h" // Column base class declares
|
|
#include "xindex.h"
|
|
#include "filter.h"
|
|
|
|
//pedef struct _tabdesc *PTABD; // For friend setting
|
|
typedef class TXTFAM *PTXF;
|
|
typedef class BLOCKFILTER *PBF;
|
|
typedef class BLOCKINDEX *PBX;
|
|
|
|
/***********************************************************************/
|
|
/* DOS table. */
|
|
/***********************************************************************/
|
|
class DllExport DOSDEF : public TABDEF { /* Logical table description */
|
|
friend class OEMDEF;
|
|
friend class TDBDOS;
|
|
friend class TDBFIX;
|
|
friend class TXTFAM;
|
|
friend class DBFBASE;
|
|
friend class UNZIPUTL;
|
|
friend class JSONCOL;
|
|
friend class TDBDCL;
|
|
public:
|
|
// Constructor
|
|
DOSDEF(void);
|
|
|
|
// Implementation
|
|
AMT GetDefType(void) override {return TYPE_AM_DOS;}
|
|
const char *GetType(void) override {return "DOS";}
|
|
PIXDEF GetIndx(void) override {return To_Indx;}
|
|
void SetIndx(PIXDEF xdp) override {To_Indx = xdp;}
|
|
bool IsHuge(void) override {return Huge;}
|
|
PCSZ GetFn(void) {return Fn;}
|
|
PCSZ GetOfn(void) {return Ofn;}
|
|
PCSZ GetEntry(void) {return Entry;}
|
|
bool GetMul(void) {return Mulentries;}
|
|
bool GetAppend(void) {return Append;}
|
|
void SetBlock(int block) { Block = block; }
|
|
int GetBlock(void) {return Block;}
|
|
int GetLast(void) {return Last;}
|
|
void SetLast(int last) {Last = last;}
|
|
int GetLrecl(void) {return Lrecl;}
|
|
void SetLrecl(int lrecl) {Lrecl = lrecl;}
|
|
bool GetPadded(void) {return Padded;}
|
|
bool GetEof(void) {return Eof;}
|
|
int GetBlksize(void) {return Blksize;}
|
|
int GetEnding(void) {return Ending;}
|
|
bool IsOptimized(void) {return (Optimized == 1);}
|
|
void SetOptimized(int opt) {Optimized = opt;}
|
|
void SetAllocBlks(int blks) {AllocBlks = blks;}
|
|
int GetAllocBlks(void) {return AllocBlks;}
|
|
int *GetTo_Pos(void) {return To_Pos;}
|
|
|
|
// Methods
|
|
int Indexable(void) override
|
|
{return (!Multiple && !Mulentries && Compressed != 1) ? 1 : 0;}
|
|
virtual bool DeleteIndexFile(PGLOBAL g, PIXDEF pxdf);
|
|
bool DefineAM(PGLOBAL g, LPCSTR am, int poff) override;
|
|
PTDB GetTable(PGLOBAL g, MODE mode) override;
|
|
bool InvalidateIndex(PGLOBAL g);
|
|
bool GetOptFileName(PGLOBAL g, char *filename);
|
|
void RemoveOptValues(PGLOBAL g);
|
|
|
|
protected:
|
|
//virtual bool Erase(char *filename);
|
|
|
|
// Members
|
|
PCSZ Fn; /* Path/Name of corresponding file */
|
|
PCSZ Ofn; /* Base Path/Name of matching index files*/
|
|
PCSZ Entry; /* Zip entry name or pattern */
|
|
PCSZ Pwd; /* Zip password */
|
|
PIXDEF To_Indx; /* To index definitions blocks */
|
|
bool Mapped; /* 0: disk file, 1: memory mapped file */
|
|
bool Zipped; /* true for zipped table file */
|
|
bool Mulentries; /* true for multiple entries */
|
|
bool Append; /* Used when creating zipped table */
|
|
bool Padded; /* true for padded table file */
|
|
bool Huge; /* true for files larger than 2GB */
|
|
bool Accept; /* true if wrong lines are accepted */
|
|
bool Eof; /* true if an EOF (0xA) character exists */
|
|
int *To_Pos; /* To array of block starting positions */
|
|
int Optimized; /* 0: No, 1:Yes, 2:Redo optimization */
|
|
int AllocBlks; /* Number of suballocated opt blocks */
|
|
int Compressed; /* 0: No, 1: gz, 2:zlib compressed file */
|
|
int Lrecl; /* Size of biggest record */
|
|
int AvgLen; /* Average size of records */
|
|
int Block; /* Number de blocks of FIX/VCT tables */
|
|
int Last; /* Number of elements of last block */
|
|
int Blksize; /* Size of padded blocks */
|
|
int Maxerr; /* Maximum number of bad records (DBF) */
|
|
int ReadMode; /* Specific to DBF */
|
|
int Ending; /* Length of end of lines */
|
|
char Teds; /* Binary table default endian setting */
|
|
}; // end of DOSDEF
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for files */
|
|
/* that are standard files with columns starting at fixed offset. */
|
|
/* The last column (and record) is of variable length. */
|
|
/***********************************************************************/
|
|
class DllExport TDBDOS : public TDBASE {
|
|
friend class XINDEX;
|
|
friend class DOSCOL;
|
|
friend class MAPCOL;
|
|
friend class TXTFAM;
|
|
friend class DOSFAM;
|
|
friend class VCTCOL;
|
|
friend RCODE CntDeleteRow(PGLOBAL, PTDB, bool);
|
|
public:
|
|
// Constructors
|
|
TDBDOS(PDOSDEF tdp, PTXF txfp);
|
|
TDBDOS(PGLOBAL g, PTDBDOS tdbp);
|
|
|
|
// Inline functions
|
|
inline void SetTxfp(PTXF txfp) {Txfp = txfp; Txfp->SetTdbp(this);}
|
|
inline PTXF GetTxfp(void) {return Txfp;}
|
|
inline char *GetLine(void) {return To_Line;}
|
|
inline int GetCurBlk(void) {return Txfp->GetCurBlk();}
|
|
inline void SetLine(char *toline) {To_Line = toline;}
|
|
inline void IncLine(int inc) {To_Line += inc;}
|
|
inline bool IsRead(void) {return Txfp->IsRead;}
|
|
inline PXOB *GetLink(void) {return To_Link;}
|
|
|
|
// Implementation
|
|
AMT GetAmType(void) override {return Txfp->GetAmType();}
|
|
PCSZ GetFile(PGLOBAL) override {return Txfp->To_File;}
|
|
void SetFile(PGLOBAL, PCSZ fn) override {Txfp->To_File = fn;}
|
|
void SetAbort(bool b) override {Abort = b;}
|
|
RECFM GetFtype(void) override {return Ftype;}
|
|
virtual bool SkipHeader(PGLOBAL) {return false;}
|
|
void RestoreNrec(void) override {Txfp->SetNrec(1);}
|
|
PTDB Duplicate(PGLOBAL g) override
|
|
{return (PTDB)new(g) TDBDOS(g, this);}
|
|
|
|
// Methods
|
|
PTDB Clone(PTABS t) override;
|
|
void ResetDB(void) override {Txfp->Reset();}
|
|
bool IsUsingTemp(PGLOBAL g) override;
|
|
bool IsIndexed(void) override {return Indxd;}
|
|
void ResetSize(void) override {MaxSize = Cardinal = -1;}
|
|
int ResetTableOpt(PGLOBAL g, bool dop, bool dox) override;
|
|
virtual int MakeBlockValues(PGLOBAL g);
|
|
virtual bool SaveBlockValues(PGLOBAL g);
|
|
bool GetBlockValues(PGLOBAL g) override;
|
|
virtual PBF InitBlockFilter(PGLOBAL g, PFIL filp);
|
|
//virtual PBX InitBlockIndex(PGLOBAL g);
|
|
virtual int TestBlock(PGLOBAL g);
|
|
void PrintAM(FILE *f, char *m) override;
|
|
|
|
// Database routines
|
|
PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n) override;
|
|
virtual char *GetOpenMode(PGLOBAL, char*) {return NULL;}
|
|
virtual int GetFileLength(PGLOBAL g) {return Txfp->GetFileLength(g);}
|
|
int GetProgMax(PGLOBAL g) override;
|
|
int GetProgCur(void) override;
|
|
//virtual int GetAffectedRows(void) {return Txfp->GetDelRows();}
|
|
int GetRecpos(void) override {return Txfp->GetPos();}
|
|
bool SetRecpos(PGLOBAL g, int recpos) override
|
|
{return Txfp->SetPos(g, recpos);}
|
|
int RowNumber(PGLOBAL g, bool b = false) override;
|
|
int Cardinality(PGLOBAL g) override;
|
|
int GetMaxSize(PGLOBAL g) override;
|
|
bool OpenDB(PGLOBAL g) override;
|
|
int ReadDB(PGLOBAL g) override;
|
|
int WriteDB(PGLOBAL g) override;
|
|
int DeleteDB(PGLOBAL g, int irc) override;
|
|
void CloseDB(PGLOBAL g) override;
|
|
virtual int ReadBuffer(PGLOBAL g) {return Txfp->ReadBuffer(g);}
|
|
|
|
// Specific routine
|
|
virtual int EstimatedLength(void);
|
|
|
|
// Optimization routines
|
|
int MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add) override;
|
|
bool InitialyzeIndex(PGLOBAL g, PIXDEF xdp, bool sorted);
|
|
void ResetBlockFilter(PGLOBAL g);
|
|
bool GetDistinctColumnValues(PGLOBAL g, int nrec);
|
|
|
|
protected:
|
|
bool PrepareWriting(PGLOBAL g) override;
|
|
PBF CheckBlockFilari(PGLOBAL g, PXOB *arg, int op, bool *cnv);
|
|
|
|
// Members
|
|
PTXF Txfp; // To the File access method class
|
|
//PBX To_BlkIdx; // To index test block
|
|
PBF To_BlkFil; // To evaluation block filter
|
|
PFIL SavFil; // Saved hidden filter
|
|
char *To_Line; // Points to current processed line
|
|
bool Abort; // TRUE when aborting UPDATE/DELETE
|
|
bool Indxd; // TRUE for indexed UPDATE/DELETE
|
|
int Lrecl; // Logical Record Length
|
|
int AvgLen; // Logical Record Average Length
|
|
//int Xeval; // BlockTest return value
|
|
int Beval; // BlockEval return value
|
|
}; // end of class TDBDOS
|
|
|
|
/***********************************************************************/
|
|
/* Class DOSCOL: DOS access method column descriptor. */
|
|
/* This A.M. is used for text file tables under operating systems */
|
|
/* DOS, OS2, UNIX, WIN16 and WIN32. */
|
|
/***********************************************************************/
|
|
class DllExport DOSCOL : public COLBLK {
|
|
friend class TDBDOS;
|
|
friend class TDBFIX;
|
|
public:
|
|
// Constructors
|
|
DOSCOL(PGLOBAL g, PCOLDEF cdp, PTDB tp, PCOL cp, int i, PCSZ am = "DOS");
|
|
DOSCOL(DOSCOL *colp, PTDB tdbp); // Constructor used in copy process
|
|
|
|
// Implementation
|
|
int GetAmType(void) override {return TYPE_AM_DOS;}
|
|
void SetTo_Val(PVAL valp) override {To_Val = valp;}
|
|
int GetClustered(void) override {return Clustered;}
|
|
int IsClustered(void) override {return (Clustered &&
|
|
((PDOSDEF)(((PTDBDOS)To_Tdb)->To_Def))->IsOptimized());}
|
|
virtual int IsSorted(void) {return Sorted;}
|
|
virtual PVBLK GetMin(void) {return Min;}
|
|
virtual PVBLK GetMax(void) {return Max;}
|
|
virtual int GetNdv(void) {return Ndv;}
|
|
virtual int GetNbm(void) {return Nbm;}
|
|
virtual PVBLK GetBmap(void) {return Bmap;}
|
|
virtual PVBLK GetDval(void) {return Dval;}
|
|
|
|
// Methods
|
|
bool VarSize(void) override;
|
|
bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check) override;
|
|
void ReadColumn(PGLOBAL g) override;
|
|
void WriteColumn(PGLOBAL g) override;
|
|
|
|
protected:
|
|
virtual bool SetMinMax(PGLOBAL g);
|
|
virtual bool SetBitMap(PGLOBAL g);
|
|
bool CheckSorted(PGLOBAL g);
|
|
bool AddDistinctValue(PGLOBAL g);
|
|
|
|
// Default constructor not to be used
|
|
DOSCOL(void) = default;
|
|
|
|
// Members
|
|
PVBLK Min; // Array of block min values
|
|
PVBLK Max; // Array of block max values
|
|
PVBLK Bmap; // Array of block bitmap values
|
|
PVBLK Dval; // Array of column distinct values
|
|
PVAL To_Val; // To value used for Update/Insert
|
|
PVAL OldVal; // The previous value of the object.
|
|
char *Buf; // Buffer used in read/write operations
|
|
char Dsp; // The decimal separator
|
|
bool Ldz; // True if field contains leading zeros
|
|
bool Nod; // True if no decimal point
|
|
int Dcm; // Last Dcm digits are decimals
|
|
int Deplac; // Offset in dos_buf
|
|
int Clustered; // 0:No 1:Yes
|
|
int Sorted; // 0:No 1:Asc (2:Desc - NIY)
|
|
int Ndv; // Number of distinct values
|
|
int Nbm; // Number of uint in bitmap
|
|
}; // end of class DOSCOL
|
|
|
|
#endif // __TABDOS_H
|