mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	Find and fix missing virtual override markings. Updates cmake maintainer flags to include -Wsuggest-override and -Winconsistent-missing-override.
		
			
				
	
	
		
			295 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			295 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*************** BlkFil H Declares Source Code File (.H) ***************/
 | 
						|
/*  Name: BLKFIL.H    Version 2.1                                      */
 | 
						|
/*                                                                     */
 | 
						|
/*  (C) Copyright to the author Olivier BERTRAND          2004-2010    */
 | 
						|
/*                                                                     */
 | 
						|
/*  This file contains the block optimization related classes declares */
 | 
						|
/***********************************************************************/
 | 
						|
#ifndef __BLKFIL__
 | 
						|
#define __BLKFIL__
 | 
						|
 | 
						|
typedef class BLOCKFILTER *PBF;
 | 
						|
typedef class BLOCKINDEX  *PBX;
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLOCKFILTER.                                   */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLOCKFILTER : public BLOCK {           /* Block Filter */
 | 
						|
  friend class BLKFILLOG;
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLOCKFILTER(PTDBDOS tdbp, int op);
 | 
						|
 | 
						|
  // Implementation
 | 
						|
          int  GetResult(void) {return Result;}
 | 
						|
          bool Correlated(void) {return Correl;}
 | 
						|
 | 
						|
  // Methods
 | 
						|
  virtual void Reset(PGLOBAL) = 0;
 | 
						|
  virtual int  BlockEval(PGLOBAL) = 0;
 | 
						|
  void Printf(PGLOBAL g, FILE *f, uint n) override;
 | 
						|
  void Prints(PGLOBAL g, char *ps, uint z) override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLOCKFILTER(void) = default;       // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  PTDBDOS Tdbp;         // Owner TDB
 | 
						|
  bool    Correl;       // TRUE for correlated subqueries
 | 
						|
  int     Opc;          // Comparison operator
 | 
						|
  int     Opm;          // Operator modificator
 | 
						|
  int     Result;       // Result from evaluation
 | 
						|
  }; // end of class BLOCKFILTER
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKFILLOG (with Op=OP_AND,OP_OR, or OP_NOT)    */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKFILLOG : public BLOCKFILTER { /* Logical Op Block Filter */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKFILLOG(PTDBDOS tdbp, int op, PBF *bfp, int n);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  void Reset(PGLOBAL g) override;
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLKFILLOG(void) = default;       // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  PBF *Fil;                // Points to Block filter args
 | 
						|
  int N;
 | 
						|
  }; // end of class BLKFILLOG
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKFILARI (with Op=OP_EQ,NE,GT,GE,LT, or LE)   */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKFILARI : public BLOCKFILTER { /* Arithm. Op Block Filter */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKFILARI(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  void Reset(PGLOBAL g) override;
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
  virtual void MakeValueBitmap(void) {}
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLKFILARI(void) = default;       // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  PDOSCOL Colp;            // Points to column argument
 | 
						|
  PCOL    Cpx;             // Point to subquery "constant" column
 | 
						|
  PVAL    Valp;            // Points to constant argument Value
 | 
						|
  bool    Sorted;          // True if the column is sorted
 | 
						|
  }; // end of class BLKFILARI
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKFILAR2 (with Op=OP_EQ,NE,GT,GE,LT, or LE)   */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKFILAR2 : public BLKFILARI { /* Arithm. Op Block Filter */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKFILAR2(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
  void MakeValueBitmap(void) override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLKFILAR2(void) = default;       // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  uint Bmp;                // The value bitmap used to test blocks
 | 
						|
  uint Bxp;                // Bitmap used when Opc = OP_EQ
 | 
						|
  }; // end of class BLKFILAR2
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKFILAR2 (with Op=OP_EQ,NE,GT,GE,LT, or LE)   */
 | 
						|
/*  To be used when the bitmap is an array of ULONG bitmaps;           */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKFILMR2 : public BLKFILARI { /* Arithm. Op Block Filter */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKFILMR2(PGLOBAL g, PTDBDOS tdbp, int op, PXOB *xp);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
  void MakeValueBitmap(void) override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLKFILMR2(void) = default;       // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  int    Nbm;              // The number of ULONG bitmaps
 | 
						|
  int    N;                // The position of the leftmost ULONG
 | 
						|
  bool   Void;             // True if all file blocks can be skipped
 | 
						|
  uint  *Bmp;              // The values bitmaps used to test blocks
 | 
						|
  uint  *Bxp;              // Bit of values <= max value
 | 
						|
  }; // end of class BLKFILMR2
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKSPCARI (with Op=OP_EQ,NE,GT,GE,LT, or LE)   */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKSPCARI : public BLOCKFILTER { /* Arithm. Op Block Filter */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKSPCARI(PTDBDOS tdbp, int op, PXOB *xp, int bsize);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  void Reset(PGLOBAL g) override;
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLKSPCARI(void) = default;       // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  PCOL    Cpx;             // Point to subquery "constant" column
 | 
						|
  PVAL    Valp;            // Points to constant argument Value
 | 
						|
  int     Val;             // Constant argument Value
 | 
						|
  int     Bsize;           // Table block size
 | 
						|
  }; // end of class BLKSPCARI
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKFILIN (with Op=OP_IN)                       */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKFILIN : public BLOCKFILTER {  // With array arguments.
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKFILIN(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  void Reset(PGLOBAL g) override;
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
  virtual void MakeValueBitmap(void) {}
 | 
						|
 | 
						|
 protected:
 | 
						|
  // Member
 | 
						|
  PDOSCOL Colp;            // Points to column argument
 | 
						|
  PARRAY  Arap;            // Points to array argument
 | 
						|
  bool    Sorted;          // True if the column is sorted
 | 
						|
  int     Type;            // Type of array elements
 | 
						|
  }; // end of class BLKFILIN
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKFILIN2 (with Op=OP_IN)                      */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKFILIN2 : public BLKFILIN {  // With array arguments.
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKFILIN2(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp);
 | 
						|
 | 
						|
  // Methods
 | 
						|
//virtual void Reset(PGLOBAL g);
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
  void MakeValueBitmap(void) override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  // Member
 | 
						|
  int    Nbm;              // The number of ULONG bitmaps
 | 
						|
  int    N;                // The position of the leftmost ULONG
 | 
						|
//bool   Bitmap;           // True for IN operator (temporary)
 | 
						|
  bool   Void;             // True if all file blocks can be skipped
 | 
						|
  bool   Invert;           // True when Result must be inverted
 | 
						|
  uint  *Bmp;              // The values bitmaps used to test blocks
 | 
						|
  uint  *Bxp;              // Bit of values <= max value
 | 
						|
  PVAL   Valp;             // Used while building the bitmaps
 | 
						|
  }; // end of class BLKFILIN2
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKSPCIN (with Op=OP_IN) Special column        */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKSPCIN : public BLOCKFILTER {  // With array arguments.
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKSPCIN(PGLOBAL g, PTDBDOS tdbp, int op, int opm, PXOB *xp, int bsize);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  void Reset(PGLOBAL g) override;
 | 
						|
  int  BlockEval(PGLOBAL g) override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  // Member
 | 
						|
  PARRAY  Arap;            // Points to array argument
 | 
						|
  int     Bsize;           // Table block size
 | 
						|
  }; // end of class BLKSPCIN
 | 
						|
 | 
						|
// ---------------- Class used in block indexing testing ----------------
 | 
						|
 | 
						|
#if 0
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLOCKINDEX.                                    */
 | 
						|
/*  Used to test the indexing to joined tables when the foreign key is */
 | 
						|
/*  a clustered or sorted column. If the table is joined to several    */
 | 
						|
/*  tables, blocks will be chained together.                           */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLOCKINDEX : public BLOCK {     /* Indexing Test Block */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLOCKINDEX(PBX nx, PDOSCOL cp, PKXBASE kp);
 | 
						|
 | 
						|
  // Implementation
 | 
						|
          PBX  GetNext(void) {return Next;}
 | 
						|
 | 
						|
  // Methods
 | 
						|
          void Reset(void);
 | 
						|
  virtual int  BlockEval(PGLOBAL);
 | 
						|
  virtual void Printf(PGLOBAL g, FILE *f, UINT n);
 | 
						|
  virtual void Prints(PGLOBAL g, char *ps, UINT z);
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLOCKINDEX(void) {}   // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  PBX     Next;         // To next Index Block
 | 
						|
  PTDBDOS Tdbp;         // To table description block
 | 
						|
  PDOSCOL Colp;         // Clustered foreign key
 | 
						|
  PKXBASE Kxp;          // To Kindex of joined table
 | 
						|
  bool    Sorted;       // TRUE if column is sorted
 | 
						|
  int     Type;         // Col/Index type
 | 
						|
  int     Result;       // Result from evaluation
 | 
						|
  }; // end of class BLOCKINDEX
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLOCKINDX2.     (XDB2)                         */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLOCKINDX2 : public BLOCKINDEX { /* Indexing Test Block */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLOCKINDX2(PBX nx, PDOSCOL cp, PKXBASE kp);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  virtual int  BlockEval(PGLOBAL);
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLOCKINDX2(void) {}   // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  int   Nbm;            // The number of ULONG bitmaps
 | 
						|
  PVBLK Dval;           // Array of column distinct values
 | 
						|
  PVBLK Bmap;           // Array of block bitmap values
 | 
						|
  }; // end of class BLOCKINDX2
 | 
						|
 | 
						|
/***********************************************************************/
 | 
						|
/*  Definition of class BLKSPCINDX.                                    */
 | 
						|
/*  Used to test the indexing to joined tables when the foreign key is */
 | 
						|
/*  the ROWID special column. If the table is joined to several        */
 | 
						|
/*  tables, blocks will be chained together.                           */
 | 
						|
/***********************************************************************/
 | 
						|
class DllExport BLKSPCINDX : public BLOCKINDEX { /* Indexing Test Block */
 | 
						|
 public:
 | 
						|
  // Constructors
 | 
						|
  BLKSPCINDX(PBX nx, PTDBDOS tp, PKXBASE kp, int bsize);
 | 
						|
 | 
						|
  // Methods
 | 
						|
  virtual int  BlockEval(PGLOBAL);
 | 
						|
 | 
						|
 protected:
 | 
						|
  BLKSPCINDX(void) {}   // Standard constructor not to be used
 | 
						|
 | 
						|
  // Members
 | 
						|
  int     Bsize;        // Table block size
 | 
						|
  }; // end of class BLOCKINDEX
 | 
						|
#endif // 0
 | 
						|
 | 
						|
#endif // __BLKFIL__
 |