| 1 | /*************** BlkFil H Declares Source Code File (.H) ***************/ |
| 2 | /* Name: BLKFIL.H Version 2.1 */ |
| 3 | /* */ |
| 4 | /* (C) Copyright to the author Olivier BERTRAND 2004-2010 */ |
| 5 | /* */ |
| 6 | /* This file contains the block optimization related classes declares */ |
| 7 | /***********************************************************************/ |
| 8 | #ifndef __BLKFIL__ |
| 9 | #define __BLKFIL__ |
| 10 | |
| 11 | typedef class BLOCKFILTER *PBF; |
| 12 | typedef class BLOCKINDEX *PBX; |
| 13 | |
| 14 | /***********************************************************************/ |
| 15 | /* Definition of class BLOCKFILTER. */ |
| 16 | /***********************************************************************/ |
| 17 | class DllExport BLOCKFILTER : public BLOCK { /* Block Filter */ |
| 18 | friend class BLKFILLOG; |
| 19 | public: |
| 20 | // Constructors |
| 21 | BLOCKFILTER(PTDBDOS tdbp, int op); |
| 22 | |
| 23 | // Implementation |
| 24 | int GetResult(void) {return Result;} |
| 25 | bool Correlated(void) {return Correl;} |
| 26 | |
| 27 | // Methods |
| 28 | virtual void Reset(PGLOBAL) = 0; |
| 29 | virtual int BlockEval(PGLOBAL) = 0; |
| 30 | virtual void Printf(PGLOBAL g, FILE *f, uint n); |
| 31 | virtual void Prints(PGLOBAL g, char *ps, uint z); |
| 32 | |
| 33 | protected: |
| 34 | BLOCKFILTER(void) {} // Standard constructor not to be used |
| 35 | |
| 36 | // Members |
| 37 | PTDBDOS Tdbp; // Owner TDB |
| 38 | bool Correl; // TRUE for correlated subqueries |
| 39 | int Opc; // Comparison operator |
| 40 | int Opm; // Operator modificator |
| 41 | int Result; // Result from evaluation |
| 42 | }; // end of class BLOCKFILTER |
| 43 | |
| 44 | /***********************************************************************/ |
| 45 | /* Definition of class BLKFILLOG (with Op=OP_AND,OP_OR, or OP_NOT) */ |
| 46 | /***********************************************************************/ |
| 47 | class DllExport BLKFILLOG : public BLOCKFILTER { /* Logical Op Block Filter */ |
| 48 | public: |
| 49 | // Constructors |
| 50 | BLKFILLOG(PTDBDOS tdbp, int op, PBF *bfp, int n); |
| 51 | |
| 52 | // Methods |
| 53 | virtual void Reset(PGLOBAL g); |
| 54 | virtual int BlockEval(PGLOBAL g); |
| 55 | |
| 56 | protected: |
| 57 | BLKFILLOG(void) {} // Standard constructor not to be used |
| 58 | |
| 59 | // Members |
| 60 | PBF *Fil; // Points to Block filter args |
| 61 | int N; |
| 62 | }; // end of class BLKFILLOG |
| 63 | |
| 64 | /***********************************************************************/ |
| 65 | /* Definition of class BLKFILARI (with Op=OP_EQ,NE,GT,GE,LT, or LE) */ |
| 66 | /***********************************************************************/ |
| 67 | class DllExport BLKFILARI : public BLOCKFILTER { /* Arithm. Op Block Filter */ |
| 68 | public: |
| 69 | // Constructors |
| 70 | BLKFILARI(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp); |
| 71 | |
| 72 | // Methods |
| 73 | virtual void Reset(PGLOBAL g); |
| 74 | virtual int BlockEval(PGLOBAL g); |
| 75 | virtual void MakeValueBitmap(void) {} |
| 76 | |
| 77 | protected: |
| 78 | BLKFILARI(void) {} // Standard constructor not to be used |
| 79 | |
| 80 | // Members |
| 81 | PDOSCOL Colp; // Points to column argument |
| 82 | PCOL Cpx; // Point to subquery "constant" column |
| 83 | PVAL Valp; // Points to constant argument Value |
| 84 | bool Sorted; // True if the column is sorted |
| 85 | }; // end of class BLKFILARI |
| 86 | |
| 87 | /***********************************************************************/ |
| 88 | /* Definition of class BLKFILAR2 (with Op=OP_EQ,NE,GT,GE,LT, or LE) */ |
| 89 | /***********************************************************************/ |
| 90 | class DllExport BLKFILAR2 : public BLKFILARI { /* Arithm. Op Block Filter */ |
| 91 | public: |
| 92 | // Constructors |
| 93 | BLKFILAR2(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp); |
| 94 | |
| 95 | // Methods |
| 96 | virtual int BlockEval(PGLOBAL g); |
| 97 | virtual void MakeValueBitmap(void); |
| 98 | |
| 99 | protected: |
| 100 | BLKFILAR2(void) {} // Standard constructor not to be used |
| 101 | |
| 102 | // Members |
| 103 | uint Bmp; // The value bitmap used to test blocks |
| 104 | uint Bxp; // Bitmap used when Opc = OP_EQ |
| 105 | }; // end of class BLKFILAR2 |
| 106 | |
| 107 | /***********************************************************************/ |
| 108 | /* Definition of class BLKFILAR2 (with Op=OP_EQ,NE,GT,GE,LT, or LE) */ |
| 109 | /* To be used when the bitmap is an array of ULONG bitmaps; */ |
| 110 | /***********************************************************************/ |
| 111 | class DllExport BLKFILMR2 : public BLKFILARI { /* Arithm. Op Block Filter */ |
| 112 | public: |
| 113 | // Constructors |
| 114 | BLKFILMR2(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp); |
| 115 | |
| 116 | // Methods |
| 117 | virtual int BlockEval(PGLOBAL g); |
| 118 | virtual void MakeValueBitmap(void); |
| 119 | |
| 120 | protected: |
| 121 | BLKFILMR2(void) {} // Standard constructor not to be used |
| 122 | |
| 123 | // Members |
| 124 | int Nbm; // The number of ULONG bitmaps |
| 125 | int N; // The position of the leftmost ULONG |
| 126 | bool Void; // True if all file blocks can be skipped |
| 127 | uint *Bmp; // The values bitmaps used to test blocks |
| 128 | uint *Bxp; // Bit of values <= max value |
| 129 | }; // end of class BLKFILMR2 |
| 130 | |
| 131 | /***********************************************************************/ |
| 132 | /* Definition of class BLKSPCARI (with Op=OP_EQ,NE,GT,GE,LT, or LE) */ |
| 133 | /***********************************************************************/ |
| 134 | class DllExport BLKSPCARI : public BLOCKFILTER { /* Arithm. Op Block Filter */ |
| 135 | public: |
| 136 | // Constructors |
| 137 | BLKSPCARI(PTDBDOS tdbp, int op, PXOB *xp, int bsize); |
| 138 | |
| 139 | // Methods |
| 140 | virtual void Reset(PGLOBAL g); |
| 141 | virtual int BlockEval(PGLOBAL g); |
| 142 | |
| 143 | protected: |
| 144 | BLKSPCARI(void) {} // Standard constructor not to be used |
| 145 | |
| 146 | // Members |
| 147 | PCOL Cpx; // Point to subquery "constant" column |
| 148 | PVAL Valp; // Points to constant argument Value |
| 149 | int Val; // Constant argument Value |
| 150 | int Bsize; // Table block size |
| 151 | }; // end of class BLKSPCARI |
| 152 | |
| 153 | /***********************************************************************/ |
| 154 | /* Definition of class BLKFILIN (with Op=OP_IN) */ |
| 155 | /***********************************************************************/ |
| 156 | class DllExport BLKFILIN : public BLOCKFILTER { // With array arguments. |
| 157 | public: |
| 158 | // Constructors |
| 159 | BLKFILIN(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp); |
| 160 | |
| 161 | // Methods |
| 162 | virtual void Reset(PGLOBAL g); |
| 163 | virtual int BlockEval(PGLOBAL g); |
| 164 | virtual void MakeValueBitmap(void) {} |
| 165 | |
| 166 | protected: |
| 167 | // Member |
| 168 | PDOSCOL Colp; // Points to column argument |
| 169 | PARRAY Arap; // Points to array argument |
| 170 | bool Sorted; // True if the column is sorted |
| 171 | int Type; // Type of array elements |
| 172 | }; // end of class BLKFILIN |
| 173 | |
| 174 | /***********************************************************************/ |
| 175 | /* Definition of class BLKFILIN2 (with Op=OP_IN) */ |
| 176 | /***********************************************************************/ |
| 177 | class DllExport BLKFILIN2 : public BLKFILIN { // With array arguments. |
| 178 | public: |
| 179 | // Constructors |
| 180 | BLKFILIN2(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp); |
| 181 | |
| 182 | // Methods |
| 183 | //virtual void Reset(PGLOBAL g); |
| 184 | virtual int BlockEval(PGLOBAL g); |
| 185 | virtual void MakeValueBitmap(void); |
| 186 | |
| 187 | protected: |
| 188 | // Member |
| 189 | int Nbm; // The number of ULONG bitmaps |
| 190 | int N; // The position of the leftmost ULONG |
| 191 | //bool Bitmap; // True for IN operator (temporary) |
| 192 | bool Void; // True if all file blocks can be skipped |
| 193 | bool Invert; // True when Result must be inverted |
| 194 | uint *Bmp; // The values bitmaps used to test blocks |
| 195 | uint *Bxp; // Bit of values <= max value |
| 196 | PVAL Valp; // Used while building the bitmaps |
| 197 | }; // end of class BLKFILIN2 |
| 198 | |
| 199 | /***********************************************************************/ |
| 200 | /* Definition of class BLKSPCIN (with Op=OP_IN) Special column */ |
| 201 | /***********************************************************************/ |
| 202 | class DllExport BLKSPCIN : public BLOCKFILTER { // With array arguments. |
| 203 | public: |
| 204 | // Constructors |
| 205 | BLKSPCIN(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp, int bsize); |
| 206 | |
| 207 | // Methods |
| 208 | virtual void Reset(PGLOBAL g); |
| 209 | virtual int BlockEval(PGLOBAL g); |
| 210 | |
| 211 | protected: |
| 212 | // Member |
| 213 | PARRAY Arap; // Points to array argument |
| 214 | int Bsize; // Table block size |
| 215 | }; // end of class BLKSPCIN |
| 216 | |
| 217 | // ---------------- Class used in block indexing testing ---------------- |
| 218 | |
| 219 | #if 0 |
| 220 | /***********************************************************************/ |
| 221 | /* Definition of class BLOCKINDEX. */ |
| 222 | /* Used to test the indexing to joined tables when the foreign key is */ |
| 223 | /* a clustered or sorted column. If the table is joined to several */ |
| 224 | /* tables, blocks will be chained together. */ |
| 225 | /***********************************************************************/ |
| 226 | class DllExport BLOCKINDEX : public BLOCK { /* Indexing Test Block */ |
| 227 | public: |
| 228 | // Constructors |
| 229 | BLOCKINDEX(PBX nx, PDOSCOL cp, PKXBASE kp); |
| 230 | |
| 231 | // Implementation |
| 232 | PBX GetNext(void) {return Next;} |
| 233 | |
| 234 | // Methods |
| 235 | void Reset(void); |
| 236 | virtual int BlockEval(PGLOBAL); |
| 237 | virtual void Printf(PGLOBAL g, FILE *f, UINT n); |
| 238 | virtual void Prints(PGLOBAL g, char *ps, UINT z); |
| 239 | |
| 240 | protected: |
| 241 | BLOCKINDEX(void) {} // Standard constructor not to be used |
| 242 | |
| 243 | // Members |
| 244 | PBX Next; // To next Index Block |
| 245 | PTDBDOS Tdbp; // To table description block |
| 246 | PDOSCOL Colp; // Clustered foreign key |
| 247 | PKXBASE Kxp; // To Kindex of joined table |
| 248 | bool Sorted; // TRUE if column is sorted |
| 249 | int Type; // Col/Index type |
| 250 | int Result; // Result from evaluation |
| 251 | }; // end of class BLOCKINDEX |
| 252 | |
| 253 | /***********************************************************************/ |
| 254 | /* Definition of class BLOCKINDX2. (XDB2) */ |
| 255 | /***********************************************************************/ |
| 256 | class DllExport BLOCKINDX2 : public BLOCKINDEX { /* Indexing Test Block */ |
| 257 | public: |
| 258 | // Constructors |
| 259 | BLOCKINDX2(PBX nx, PDOSCOL cp, PKXBASE kp); |
| 260 | |
| 261 | // Methods |
| 262 | virtual int BlockEval(PGLOBAL); |
| 263 | |
| 264 | protected: |
| 265 | BLOCKINDX2(void) {} // Standard constructor not to be used |
| 266 | |
| 267 | // Members |
| 268 | int Nbm; // The number of ULONG bitmaps |
| 269 | PVBLK Dval; // Array of column distinct values |
| 270 | PVBLK Bmap; // Array of block bitmap values |
| 271 | }; // end of class BLOCKINDX2 |
| 272 | |
| 273 | /***********************************************************************/ |
| 274 | /* Definition of class BLKSPCINDX. */ |
| 275 | /* Used to test the indexing to joined tables when the foreign key is */ |
| 276 | /* the ROWID special column. If the table is joined to several */ |
| 277 | /* tables, blocks will be chained together. */ |
| 278 | /***********************************************************************/ |
| 279 | class DllExport BLKSPCINDX : public BLOCKINDEX { /* Indexing Test Block */ |
| 280 | public: |
| 281 | // Constructors |
| 282 | BLKSPCINDX(PBX nx, PTDBDOS tp, PKXBASE kp, int bsize); |
| 283 | |
| 284 | // Methods |
| 285 | virtual int BlockEval(PGLOBAL); |
| 286 | |
| 287 | protected: |
| 288 | BLKSPCINDX(void) {} // Standard constructor not to be used |
| 289 | |
| 290 | // Members |
| 291 | int Bsize; // Table block size |
| 292 | }; // end of class BLOCKINDEX |
| 293 | #endif // 0 |
| 294 | |
| 295 | #endif // __BLKFIL__ |
| 296 | |