1 /*************** TabTbl H Declares Source Code File (.H) ***************/
2 /*  Name: TABTBL.H   Version 1.3                                       */
3 /*                                                                     */
4 /*  (C) Copyright to the author Olivier BERTRAND          2008-2013    */
5 /*                                                                     */
6 /*  This file contains the TDBTBL classes declares.                    */
7 /***********************************************************************/
8 #include "block.h"
9 #include "colblk.h"
10 #include "tabutil.h"
11 
12 typedef class TBLDEF *PTBLDEF;
13 typedef class TDBTBL *PTDBTBL;
14 typedef class MYSQLC *PMYC;
15 
16 /***********************************************************************/
17 /*  TBL table.                                                         */
18 /***********************************************************************/
19 class DllExport TBLDEF : public PRXDEF {  /* Logical table description */
20   friend class TDBTBL;
21   friend class TDBTBC;
22  public:
23   // Constructor
24   TBLDEF(void);
25 
26   // Implementation
GetType(void)27   virtual const char *GetType(void) {return "TBL";}
28 
29   // Methods
30   virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
31   virtual PTDB GetTable(PGLOBAL g, MODE m);
32 
33  protected:
34   // Members
35   bool    Accept;                  /* TRUE if bad tables are accepted  */
36   bool    Thread;                  /* Use thread for remote tables     */
37   int     Maxerr;                  /* Maximum number of bad tables     */
38   int     Ntables;                 /* Number of tables                 */
39   }; // end of TBLDEF
40 
41 /***********************************************************************/
42 /*  This is the TBL Access Method class declaration.                   */
43 /***********************************************************************/
44 class DllExport TDBTBL : public TDBPRX {
45   friend class TBTBLK;
46  public:
47   // Constructor
48   TDBTBL(PTBLDEF tdp = NULL);
49 
50   // Implementation
GetAmType(void)51   virtual AMT  GetAmType(void) {return TYPE_AM_TBL;}
52 
53   // Methods
54   virtual void ResetDB(void);
GetRecpos(void)55   virtual int  GetRecpos(void) {return Rows;}
GetBadLines(void)56   virtual int  GetBadLines(void) {return (int)Nbc;}
57 
58   // Database routines
59   virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
60   virtual int  Cardinality(PGLOBAL g);
61   virtual int  GetMaxSize(PGLOBAL g);
62   virtual int  RowNumber(PGLOBAL g, bool b = FALSE);
63   virtual PCOL InsertSpecialColumn(PCOL scp);
64   virtual bool OpenDB(PGLOBAL g);
65   virtual int  ReadDB(PGLOBAL g);
66 
67  protected:
68   // Internal functions
69   bool  InitTableList(PGLOBAL g);
70   bool  TestFil(PGLOBAL g, PCFIL filp, PTABLE tabp);
71 
72   // Members
73   PTABLE  Tablist;              // Points to the table list
74   PTABLE  CurTable;             // Points to the current table
75   bool    Accept;               // TRUE if bad tables are accepted
76   int     Maxerr;               // Maximum number of bad tables
77   int     Nbc;                  // Number of bad connections
78   int     Rows;                 // Used for RowID
79   int     Crp;                  // Used for CurPos
80   }; // end of class TDBTBL
81 
82 /***********************************************************************/
83 /*  Class TBTBLK: TDBPLG TABID special column descriptor.              */
84 /***********************************************************************/
85 class TBTBLK : public TIDBLK {
86  public:
87   // The constructor must restore Value because XOBJECT has a void
88   // constructor called by default that set Value to NULL
TBTBLK(PVAL valp)89   TBTBLK(PVAL valp) {Value = valp;}
90 
91   // Methods
92   virtual void ReadColumn(PGLOBAL g);
93 
94   // Fake operator new used to change TIDBLK into SDTBLK
new(size_t size,TIDBLK * sp)95   void * operator new(size_t size, TIDBLK *sp) {return sp;}
96 
97 #if !defined(__BORLANDC__)
98   // Avoid warning C4291 by defining a matching dummy delete operator
delete(void *,TIDBLK *)99   void operator delete(void *, TIDBLK*) {}
delete(void *,size_t size)100   void operator delete(void *, size_t size) {}
101 #endif
102 
103  protected:
104   // Must not have additional members
105 }; // end of class TBTBLK
106 
107 #if defined(DEVELOPMENT)
108 /***********************************************************************/
109 /*  This table type is buggy and removed until a fix is found.         */
110 /***********************************************************************/
111 typedef class TDBTBM *PTDBTBM;
112 
113 /***********************************************************************/
114 /*  Defines the structures used for distributed TBM tables.            */
115 /***********************************************************************/
116 typedef struct _TBMtable *PTBMT;
117 
118 typedef struct _TBMtable {
119 	PTBMT     Next;                 // Points to next data table struct
120 	PTABLE    Tap;                  // Points to the sub table
121 	PGLOBAL   G;                    // Needed in thread routine
122 	bool      Complete;             // TRUE when all results are read
123 	bool      Ready;                // TRUE when results are there
124 	int       Rows;                 // Total number of rows read so far
125 	int       ProgCur;              // Current pos
126 	int       ProgMax;              // Max pos
127 	int       Rc;                   // Return code
128 	THD      *Thd;
129 	pthread_attr_t attr;            // ???
130 	pthread_t Tid;                  // CheckOpen thread ID
131 } TBMT;
132 
133 /***********************************************************************/
134 /*  This is the TBM Access Method class declaration.                   */
135 /***********************************************************************/
136 class DllExport TDBTBM : public TDBTBL {
137   friend class TBTBLK;
138  public:
139   // Constructor
140   TDBTBM(PTBLDEF tdp = NULL);
141 
142   // Methods
143   virtual void ResetDB(void);
144 
145   // Database routines
Cardinality(PGLOBAL g)146 	virtual int  Cardinality(PGLOBAL g) { return 10; }
GetMaxSize(PGLOBAL g)147 	virtual int  GetMaxSize(PGLOBAL g) { return 10; } // Temporary
148   virtual int  RowNumber(PGLOBAL g, bool b = FALSE);
149   virtual bool OpenDB(PGLOBAL g);
150   virtual int  ReadDB(PGLOBAL g);
151 
152  protected:
153   // Internal functions
154 	bool  IsLocal(PTABLE tbp);
155   bool  OpenTables(PGLOBAL g);
156   int   ReadNextRemote(PGLOBAL g);
157 
158   // Members
159   PTBMT Tmp;                  // To data table TBMT structures
160   PTBMT Cmp;                  // Current data table PLGF (to move to TDBTBL)
161   PTBMT Bmp;                  // To bad (unconnected) PLGF structures
162   bool  Done;                 // TRUE after first GetAllResults
163   int   Nrc;                  // Number of remote connections
164   int   Nlc;                  // Number of local connections
165   }; // end of class TDBTBM
166 
167 pthread_handler_t ThreadOpen(void *p);
168 #endif // DEVELOPMENT
169