mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
170 lines
6.4 KiB
C++
170 lines
6.4 KiB
C++
/*************** FilAmGz H Declares Source Code File (.H) **************/
|
|
/* Name: FILAMGZ.H Version 1.3 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2005-2016 */
|
|
/* */
|
|
/* This file contains the GZIP access method classes declares. */
|
|
/***********************************************************************/
|
|
#ifndef __FILAMGZ_H
|
|
#define __FILAMGZ_H
|
|
|
|
#include "zlib.h"
|
|
|
|
typedef class GZFAM *PGZFAM;
|
|
typedef class ZBKFAM *PZBKFAM;
|
|
typedef class GZXFAM *PZIXFAM;
|
|
typedef class ZLBFAM *PZLBFAM;
|
|
|
|
/***********************************************************************/
|
|
/* This is the access method class declaration for not optimized */
|
|
/* variable record length files compressed using the gzip library */
|
|
/* functions. File is accessed record by record (row). */
|
|
/***********************************************************************/
|
|
class DllExport GZFAM : public TXTFAM {
|
|
// friend class DOSCOL;
|
|
public:
|
|
// Constructor
|
|
GZFAM(PDOSDEF tdp) : TXTFAM(tdp) {Zfile = NULL; Zpos = 0;}
|
|
GZFAM(PGZFAM txfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_GZ;}
|
|
virtual int GetPos(void);
|
|
virtual int GetNextPos(void);
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) GZFAM(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 bool AllocateBuffer(PGLOBAL g);
|
|
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 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:
|
|
int Zerror(PGLOBAL g); // GZ error function
|
|
|
|
// Members
|
|
gzFile Zfile; // Points to GZ file structure
|
|
z_off_t Zpos; // Uncompressed file position
|
|
}; // end of class GZFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the access method class declaration for optimized variable */
|
|
/* record length files compressed using the gzip library functions. */
|
|
/* The File is accessed by block (requires an opt file). */
|
|
/***********************************************************************/
|
|
class DllExport ZBKFAM : public GZFAM {
|
|
public:
|
|
// Constructor
|
|
ZBKFAM(PDOSDEF tdp);
|
|
ZBKFAM(PZBKFAM txfp);
|
|
|
|
// Implementation
|
|
virtual int GetPos(void);
|
|
virtual int GetNextPos(void) {return 0;}
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) ZBKFAM(this);}
|
|
|
|
// Methods
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual int MaxBlkSize(PGLOBAL g, int s);
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual int GetRowID(void);
|
|
virtual bool RecordPos(PGLOBAL g);
|
|
virtual int SkipRecord(PGLOBAL g, bool header);
|
|
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:
|
|
// Members
|
|
char *CurLine; // Position of current line in buffer
|
|
char *NxtLine; // Position of Next line in buffer
|
|
bool Closing; // True when closing on Insert
|
|
}; // end of class ZBKFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the access method class declaration for fixed record */
|
|
/* length files compressed using the gzip library functions. */
|
|
/* The file is always accessed by block. */
|
|
/***********************************************************************/
|
|
class DllExport GZXFAM : public ZBKFAM {
|
|
public:
|
|
// Constructor
|
|
GZXFAM(PDOSDEF tdp);
|
|
GZXFAM(PZIXFAM txfp) : ZBKFAM(txfp) {}
|
|
|
|
// Implementation
|
|
virtual int GetNextPos(void) {return 0;}
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) GZXFAM(this);}
|
|
|
|
// Methods
|
|
virtual int Cardinality(PGLOBAL g);
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
|
|
protected:
|
|
// No additional Members
|
|
}; // end of class GZXFAM
|
|
|
|
/***********************************************************************/
|
|
/* This is the DOS/UNIX Access Method class declaration for PlugDB */
|
|
/* fixed/variable files compressed using the zlib library functions. */
|
|
/* Physically these are written and read using the same technique */
|
|
/* than blocked variable files, only the contain of each block is */
|
|
/* compressed using the deflate zlib function. The purpose of this */
|
|
/* specific format is to have a fast mechanism for direct access of */
|
|
/* records so blocked optimization is fast and direct access (joins) */
|
|
/* is allowed. Note that the block length is written ahead of each */
|
|
/* block to enable reading when optimization file is not available. */
|
|
/***********************************************************************/
|
|
class DllExport ZLBFAM : public BLKFAM {
|
|
public:
|
|
// Constructor
|
|
ZLBFAM(PDOSDEF tdp);
|
|
ZLBFAM(PZLBFAM txfp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_ZLIB;}
|
|
virtual int GetPos(void);
|
|
virtual int GetNextPos(void);
|
|
virtual PTXF Duplicate(PGLOBAL g)
|
|
{return (PTXF)new(g) ZLBFAM(this);}
|
|
inline void SetOptimized(bool b) {Optimized = b;}
|
|
|
|
// Methods
|
|
virtual int GetFileLength(PGLOBAL g);
|
|
virtual bool SetPos(PGLOBAL g, int recpos);
|
|
virtual bool AllocateBuffer(PGLOBAL g);
|
|
virtual int ReadBuffer(PGLOBAL g);
|
|
virtual int WriteBuffer(PGLOBAL g);
|
|
virtual void CloseTableFile(PGLOBAL g, bool abort);
|
|
virtual void Rewind(void);
|
|
|
|
protected:
|
|
bool WriteCompressedBuffer(PGLOBAL g);
|
|
int ReadCompressedBuffer(PGLOBAL g, void *rdbuf);
|
|
|
|
// Members
|
|
z_streamp Zstream; // Compression/decompression stream
|
|
Byte *Zbuffer; // Compressed block buffer
|
|
int *Zlenp; // Pointer to block length
|
|
bool Optimized; // true when opt file is available
|
|
}; // end of class ZLBFAM
|
|
|
|
#endif // __FILAMGZ_H
|