summaryrefslogtreecommitdiff
path: root/storage/connect/taboccur.h
blob: 0cfabf877934a4fdc81f31410b2330170891654c (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
// TABOCCUR.H     Olivier Bertrand    2013
// Defines the OCCUR tables

#include "tabutil.h"

#define TYPE_AM_OCCUR (AMT)128

typedef class OCCURDEF *POCCURDEF;
typedef class TDBOCCUR *PTDBOCCUR;
typedef class OCCURCOL *POCCURCOL;
typedef class RANKCOL *PRANKCOL;
typedef class SRTCOL *PSRTCOL;

/* -------------------------- OCCUR classes -------------------------- */

/***********************************************************************/
/*  OCCUR: OEM table that provides a view of a source table where the  */
/*  contain of several columns of the source table is placed in only   */
/*  one column, the OCCUR column, this resulting into several rows.    */
/***********************************************************************/

/***********************************************************************/
/*  OCCUR table.                                                       */
/***********************************************************************/
class OCCURDEF : public PRXDEF {          /* Logical table description */
	friend class TDBOCCUR;
 public:
  // Constructor
	OCCURDEF(void) {Pseudo = 3; Colist = Xcol = NULL;}

  // Implementation
  virtual const char *GetType(void) {return "OCCUR";}

  // Methods
  virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
  virtual PTDB GetTable(PGLOBAL g, MODE m);

 protected:
  // Members
//char   *Tabname;					 /* The source table name                  */
	char   *Colist;						 /* The source column list                 */
  char   *Xcol;              /* The multiple occurence column          */
  char   *Rcol;              /* The rank column                        */
  }; // end of OCCURDEF

/***********************************************************************/
/*  This is the class declaration for the OCCUR table.                 */
/***********************************************************************/
class TDBOCCUR : public TDBPRX {
  friend class OCCURCOL;
  friend class RANKCOL;
	friend class SRTCOL;
 public:
  // Constructor
  TDBOCCUR(POCCURDEF tdp);

  // Implementation
  virtual AMT   GetAmType(void) {return TYPE_AM_OCCUR;}
  				void  SetTdbp(PTDBASE tdbp) {Tdbp = tdbp;}

  // Methods
//virtual int   GetRecpos(void) {return N;}
	virtual void  ResetDB(void) {N = 0; Tdbp->ResetDB();}
	virtual int   RowNumber(PGLOBAL g, bool b = FALSE);
					PTDB  GetSourceTable(PGLOBAL g);
					int   MakeColumnList(PGLOBAL g);

  // Database routines
//virtual PCOL  ColDB(PGLOBAL g, PSZ colname, int num);
	virtual PCOL  MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
  virtual int   GetMaxSize(PGLOBAL g);
  virtual bool  OpenDB(PGLOBAL g);
  virtual int   ReadDB(PGLOBAL g);

 protected:
  // Members
//PTDBASE   Tdbp;										// To the source table or view
  LPCSTR    Tabname;								// Name of source table
	char     *Colist;                 // Source column list
	char     *Xcolumn;								// Occurence column name
	char     *Rcolumn;								// Rank column name
	POCCURCOL Xcolp;									// To the OCCURCOL column
	PCOL     *Col;									  // To source multiple columns
	int       Mult;										// Multiplication factor
	int       N;											// The current table index
	int		    M;                      // The occurence rank
	BYTE      RowFlag;								// 0: Ok, 1: Same, 2: Skip
  }; // end of class TDBOCCUR

/***********************************************************************/
/*  Class OCCURCOL: for the multiple occurence column.                 */
/***********************************************************************/
class OCCURCOL : public COLBLK {
 public:
  // Constructors
  OCCURCOL(PCOLDEF cdp, PTDBOCCUR tdbp, int n);
//OCCURCOL(OCCURCOL *colp, PTDB tdbp); // Constructor used in copy process

  // Implementation
  virtual int  GetAmType(void) {return TYPE_AM_OCCUR;}
					int  GetI(void) {return I;}

  // Methods
  virtual void Reset(void) {}		// Evaluated only by TDBOCCUR
  virtual void ReadColumn(PGLOBAL g);
					void Xreset(void) {I = 0;};

 protected:
  // Default constructor not to be used
  OCCURCOL(void) {}

  // Members
	int    I;
  }; // end of class OCCURCOL

/***********************************************************************/
/*  Class RANKCOL: for the multiple occurence column ranking.          */
/***********************************************************************/
class RANKCOL : public COLBLK {
 public:
  // Constructors
	 RANKCOL(PCOLDEF cdp, PTDBOCCUR tdbp, int n) : COLBLK(cdp, tdbp, n) {}
//RANKCOL(RANKCOL *colp, PTDB tdbp); // Constructor used in copy process

  // Implementation
  virtual int  GetAmType(void) {return TYPE_AM_OCCUR;}

  // Methods
  virtual void ReadColumn(PGLOBAL g);

 protected:
  // Default constructor not to be used
  RANKCOL(void) {}

  // Members
  }; // end of class RANKCOL

/***********************************************************************/
/*  Definition of class XCOLDEF.                                       */
/*  This class purpose is just to access COLDEF protected items!       */
/***********************************************************************/
class XCOLDEF: public COLDEF {
	friend class TDBOCCUR;
	}; // end of class XCOLDEF