summaryrefslogtreecommitdiff
path: root/storage/connect/tabdos.h
blob: 219400c119eae2ea79faf9467129125d60e07837 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/*************** TabDos H Declares Source Code File (.H) ***************/
/*  Name: TABDOS.H    Version 3.2                                      */
/*                                                                     */
/*  (C) Copyright to the author Olivier BERTRAND          1999-2012    */
/*                                                                     */
/*  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"

typedef struct _tabdesc   *PTABD;         // For friend setting
typedef class TXTFAM      *PTXF;

/***********************************************************************/
/*  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;
 public:
  // Constructor
  DOSDEF(void);

  // Implementation
	virtual AMT         GetDefType(void) {return TYPE_AM_DOS;}
  virtual const char *GetType(void) {return "DOS";}
	virtual PIXDEF      GetIndx(void) {return To_Indx;}
	virtual void        SetIndx(PIXDEF xdp) {To_Indx = xdp;}
	PSZ     GetOfn(void) {return Ofn;}
  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;}
	int    *GetTo_Pos(void) {return To_Pos;}
	virtual bool IsHuge(void) {return Huge;}

  // Methods
  virtual bool DeleteTableFile(PGLOBAL g);
	virtual bool Indexable(void) {return Compressed != 1;}
	virtual bool DeleteIndexFile(PGLOBAL g, PIXDEF pxdf);
  virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
  virtual PTDB GetTable(PGLOBAL g, MODE mode);
					bool InvalidateIndex(PGLOBAL g);

 protected:
  virtual bool Erase(char *filename);

  // Members
  PSZ     Fn;                 /* Path/Name of corresponding file       */
  PSZ     Ofn;                /* Base Path/Name of matching index files*/
	PIXDEF  To_Indx;						/* To index definitions blocks           */
  RECFM   Recfm;              /* 0:VAR, 1:FIX, 2:BIN, 3:VCT, 6:DBF     */
  bool    Mapped;             /* 0: disk file, 1: memory mapped file   */
  bool    Padded;             /* true for padded table file            */
  bool    Huge;               /* true for files larger than 2GB        */
  bool    Accept;             /* true if wrong lines are accepted (DBF)*/
  bool    Eof;								/* true if an EOF (0xA) character exists */
	int    *To_Pos;							/* To array of block starting positions  */
  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                */
  }; // 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 KINDEX;
	friend class XINDEX;
  friend class DOSCOL;
  friend class MAPCOL;
  friend class TXTFAM;
  friend class DOSFAM;
	friend class VCTCOL;
//friend class TDBMUL;
  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;}
//inline  PCOL *GetKeyCol(void) {return To_Key_Col;}

  // Implementation
  virtual AMT   GetAmType(void) {return Txfp->GetAmType();}
  virtual PSZ   GetFile(PGLOBAL g) {return Txfp->To_File;}
	virtual void  SetFile(PGLOBAL g, PSZ fn) {Txfp->To_File = fn;}
	virtual RECFM GetFtype(void) {return Ftype;}
  virtual bool  SkipHeader(PGLOBAL g) {return false;}
	virtual void  RestoreNrec(void) {Txfp->SetNrec(1);}
  virtual PTDB  Duplicate(PGLOBAL g)
                {return (PTDB)new(g) TDBDOS(g, this);}

  // Methods
  virtual PTDB  CopyOne(PTABS t);
  virtual void  ResetDB(void) {Txfp->Reset();}
  virtual bool  IsUsingTemp(PGLOBAL g);
//virtual bool  NeedIndexing(PGLOBAL g);
	virtual void  ResetSize(void) {MaxSize = Cardinal = -1;}
	virtual int   ResetTableOpt(PGLOBAL g, bool dox);
//virtual int   MakeBlockValues(PGLOBAL g);
//virtual bool  SaveBlockValues(PGLOBAL g);
//virtual bool  GetBlockValues(PGLOBAL g);
//virtual PBF   InitBlockFilter(PGLOBAL g, PFIL filp);
//virtual PBX   InitBlockIndex(PGLOBAL g);
//virtual int   TestBlock(PGLOBAL g);
  virtual void  PrintAM(FILE *f, char *m);

  // Database routines
  virtual PCOL  MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
  virtual char *GetOpenMode(PGLOBAL g, char *opmode) {return NULL;}
  virtual int   GetFileLength(PGLOBAL g) {return Txfp->GetFileLength(g);}
  virtual int   GetProgMax(PGLOBAL g);
  virtual int   GetProgCur(void);
	virtual int   GetAffectedRows(void) {return Txfp->GetDelRows();}
	virtual int   GetRecpos(void) {return Txfp->GetPos();}
  virtual bool  SetRecpos(PGLOBAL g, int recpos)
								{return Txfp->SetPos(g, recpos);}
  virtual int   RowNumber(PGLOBAL g, bool b = false);
  virtual int   Cardinality(PGLOBAL g);
  virtual int   GetMaxSize(PGLOBAL g);
  virtual bool  OpenDB(PGLOBAL g);
  virtual int   ReadDB(PGLOBAL g);
  virtual int   WriteDB(PGLOBAL g);
  virtual int   DeleteDB(PGLOBAL g, int irc);
  virtual void  CloseDB(PGLOBAL g);
  virtual int   ReadBuffer(PGLOBAL g) {return Txfp->ReadBuffer(g);}

	// Specific routine
	virtual int  EstimatedLength(PGLOBAL g);

	// Optimization routines
//				void  ResetBlockFilter(PGLOBAL g);
					int		MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add);
//				bool  GetDistinctColumnValues(PGLOBAL g, int nrec);

 protected:
//				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
	int     Cardinal;					 // Table Cardinality
	RECFM   Ftype;             // File type: 0-var 1-fixed 2-binary (VCT)
  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, PSZ am = "DOS");
  DOSCOL(DOSCOL *colp, PTDB tdbp); // Constructor used in copy process

  // Implementation
  virtual int    GetAmType(void) {return TYPE_AM_DOS;}
//virtual int    GetClustered(void) {return Clustered;}
//virtual int    IsClustered(void) {return (Clustered &&
//               ((PDOSDEF)(((PTDBDOS)To_Tdb)->To_Def))->IsOptimized());}
//virtual int    IsSorted(void) {return Sorted;}
  virtual void   SetTo_Val(PVAL valp) {To_Val = valp;}
//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
	virtual bool	 VarSize(void);
  virtual bool   SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check);
  virtual void   ReadColumn(PGLOBAL g);
  virtual void   WriteColumn(PGLOBAL g);
  virtual void   Print(PGLOBAL g, FILE *, uint);

 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) {}

  // 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 write operations
	bool  Ldz;					// True if field contains leading zeros
	bool  Nod;					// True if no decimal point
	int   Dcm;					// Last Dcm digits are decimals
//int   Clustered;    // 0:No 1:Yes
//int   Sorted;       // 0:No 1:Asc (2:Desc - NIY)
  int   Deplac;       // Offset in dos_buf
//int		Ndv;					// Number of distinct values
//int   Nbm;					// Number of uint in bitmap
  }; // end of class DOSCOL

#endif // __TABDOS_H