1 /*************** FilAmGz H Declares Source Code File (.H) **************/ 2 /* Name: FILAMGZ.H Version 1.3 */ 3 /* */ 4 /* (C) Copyright to the author Olivier BERTRAND 2005-2016 */ 5 /* */ 6 /* This file contains the GZIP access method classes declares. */ 7 /***********************************************************************/ 8 #ifndef __FILAMGZ_H 9 #define __FILAMGZ_H 10 11 #include "zlib.h" 12 13 typedef class GZFAM *PGZFAM; 14 typedef class ZBKFAM *PZBKFAM; 15 typedef class GZXFAM *PZIXFAM; 16 typedef class ZLBFAM *PZLBFAM; 17 18 /***********************************************************************/ 19 /* This is the access method class declaration for not optimized */ 20 /* variable record length files compressed using the gzip library */ 21 /* functions. File is accessed record by record (row). */ 22 /***********************************************************************/ 23 class DllExport GZFAM : public TXTFAM { 24 // friend class DOSCOL; 25 public: 26 // Constructor GZFAM(PDOSDEF tdp)27 GZFAM(PDOSDEF tdp) : TXTFAM(tdp) {Zfile = NULL; Zpos = 0;} 28 GZFAM(PGZFAM txfp); 29 30 // Implementation GetAmType(void)31 virtual AMT GetAmType(void) {return TYPE_AM_GZ;} 32 virtual int GetPos(void); 33 virtual int GetNextPos(void); Duplicate(PGLOBAL g)34 virtual PTXF Duplicate(PGLOBAL g) 35 {return (PTXF)new(g) GZFAM(this);} 36 37 // Methods 38 virtual void Reset(void); 39 virtual int GetFileLength(PGLOBAL g); Cardinality(PGLOBAL g)40 virtual int Cardinality(PGLOBAL g) {return (g) ? -1 : 0;} MaxBlkSize(PGLOBAL g,int s)41 virtual int MaxBlkSize(PGLOBAL g, int s) {return s;} 42 virtual bool AllocateBuffer(PGLOBAL g); 43 virtual int GetRowID(void); 44 virtual bool RecordPos(PGLOBAL g); 45 virtual bool SetPos(PGLOBAL g, int recpos); 46 virtual int SkipRecord(PGLOBAL g, bool header); 47 virtual bool OpenTableFile(PGLOBAL g); 48 virtual int ReadBuffer(PGLOBAL g); 49 virtual int WriteBuffer(PGLOBAL g); 50 virtual int DeleteRecords(PGLOBAL g, int irc); 51 virtual void CloseTableFile(PGLOBAL g, bool abort); 52 virtual void Rewind(void); 53 54 protected: 55 int Zerror(PGLOBAL g); // GZ error function 56 57 // Members 58 gzFile Zfile; // Points to GZ file structure 59 z_off_t Zpos; // Uncompressed file position 60 }; // end of class GZFAM 61 62 /***********************************************************************/ 63 /* This is the access method class declaration for optimized variable */ 64 /* record length files compressed using the gzip library functions. */ 65 /* The File is accessed by block (requires an opt file). */ 66 /***********************************************************************/ 67 class DllExport ZBKFAM : public GZFAM { 68 public: 69 // Constructor 70 ZBKFAM(PDOSDEF tdp); 71 ZBKFAM(PZBKFAM txfp); 72 73 // Implementation 74 virtual int GetPos(void); GetNextPos(void)75 virtual int GetNextPos(void) {return 0;} Duplicate(PGLOBAL g)76 virtual PTXF Duplicate(PGLOBAL g) 77 {return (PTXF)new(g) ZBKFAM(this);} 78 79 // Methods 80 virtual int Cardinality(PGLOBAL g); 81 virtual int MaxBlkSize(PGLOBAL g, int s); 82 virtual bool AllocateBuffer(PGLOBAL g); 83 virtual int GetRowID(void); 84 virtual bool RecordPos(PGLOBAL g); 85 virtual int SkipRecord(PGLOBAL g, bool header); 86 virtual int ReadBuffer(PGLOBAL g); 87 virtual int WriteBuffer(PGLOBAL g); 88 virtual int DeleteRecords(PGLOBAL g, int irc); 89 virtual void CloseTableFile(PGLOBAL g, bool abort); 90 virtual void Rewind(void); 91 92 protected: 93 // Members 94 char *CurLine; // Position of current line in buffer 95 char *NxtLine; // Position of Next line in buffer 96 bool Closing; // True when closing on Insert 97 }; // end of class ZBKFAM 98 99 /***********************************************************************/ 100 /* This is the access method class declaration for fixed record */ 101 /* length files compressed using the gzip library functions. */ 102 /* The file is always accessed by block. */ 103 /***********************************************************************/ 104 class DllExport GZXFAM : public ZBKFAM { 105 public: 106 // Constructor 107 GZXFAM(PDOSDEF tdp); GZXFAM(PZIXFAM txfp)108 GZXFAM(PZIXFAM txfp) : ZBKFAM(txfp) {} 109 110 // Implementation GetNextPos(void)111 virtual int GetNextPos(void) {return 0;} Duplicate(PGLOBAL g)112 virtual PTXF Duplicate(PGLOBAL g) 113 {return (PTXF)new(g) GZXFAM(this);} 114 115 // Methods 116 virtual int Cardinality(PGLOBAL g); 117 virtual bool AllocateBuffer(PGLOBAL g); 118 virtual int ReadBuffer(PGLOBAL g); 119 virtual int WriteBuffer(PGLOBAL g); 120 121 protected: 122 // No additional Members 123 }; // end of class GZXFAM 124 125 /***********************************************************************/ 126 /* This is the DOS/UNIX Access Method class declaration for PlugDB */ 127 /* fixed/variable files compressed using the zlib library functions. */ 128 /* Physically these are written and read using the same technique */ 129 /* than blocked variable files, only the contain of each block is */ 130 /* compressed using the deflate zlib function. The purpose of this */ 131 /* specific format is to have a fast mechanism for direct access of */ 132 /* records so blocked optimization is fast and direct access (joins) */ 133 /* is allowed. Note that the block length is written ahead of each */ 134 /* block to enable reading when optimization file is not available. */ 135 /***********************************************************************/ 136 class DllExport ZLBFAM : public BLKFAM { 137 public: 138 // Constructor 139 ZLBFAM(PDOSDEF tdp); 140 ZLBFAM(PZLBFAM txfp); 141 142 // Implementation GetAmType(void)143 virtual AMT GetAmType(void) {return TYPE_AM_ZLIB;} 144 virtual int GetPos(void); 145 virtual int GetNextPos(void); Duplicate(PGLOBAL g)146 virtual PTXF Duplicate(PGLOBAL g) 147 {return (PTXF)new(g) ZLBFAM(this);} SetOptimized(bool b)148 inline void SetOptimized(bool b) {Optimized = b;} 149 150 // Methods 151 virtual int GetFileLength(PGLOBAL g); 152 virtual bool SetPos(PGLOBAL g, int recpos); 153 virtual bool AllocateBuffer(PGLOBAL g); 154 virtual int ReadBuffer(PGLOBAL g); 155 virtual int WriteBuffer(PGLOBAL g); 156 virtual void CloseTableFile(PGLOBAL g, bool abort); 157 virtual void Rewind(void); 158 159 protected: 160 bool WriteCompressedBuffer(PGLOBAL g); 161 int ReadCompressedBuffer(PGLOBAL g, void *rdbuf); 162 163 // Members 164 z_streamp Zstream; // Compression/decompression stream 165 Byte *Zbuffer; // Compressed block buffer 166 int *Zlenp; // Pointer to block length 167 bool Optimized; // true when opt file is available 168 }; // end of class ZLBFAM 169 170 #endif // __FILAMGZ_H 171