mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
08c852026d
This patch is the result of running run-clang-tidy -fix -header-filter=.* -checks='-*,modernize-use-equals-default' . Code style changes have been done on top. The result of this change leads to the following improvements: 1. Binary size reduction. * For a -DBUILD_CONFIG=mysql_release build, the binary size is reduced by ~400kb. * A raw -DCMAKE_BUILD_TYPE=Release reduces the binary size by ~1.4kb. 2. Compiler can better understand the intent of the code, thus it leads to more optimization possibilities. Additionally it enabled detecting unused variables that had an empty default constructor but not marked so explicitly. Particular change required following this patch in sql/opt_range.cc result_keys, an unused template class Bitmap now correctly issues unused variable warnings. Setting Bitmap template class constructor to default allows the compiler to identify that there are no side-effects when instantiating the class. Previously the compiler could not issue the warning as it assumed Bitmap class (being a template) would not be performing a NO-OP for its default constructor. This prevented the "unused variable warning".
200 lines
8.2 KiB
C++
200 lines
8.2 KiB
C++
/************** TabPivot H Declares Source Code File (.H) **************/
|
|
/* Name: TABPIVOT.H Version 1.5 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2005-2013 */
|
|
/* */
|
|
/* This file contains the PIVOT classes declares. */
|
|
/***********************************************************************/
|
|
typedef class PIVOTDEF *PPIVOTDEF;
|
|
typedef class TDBPIVOT *PTDBPIVOT;
|
|
typedef class FNCCOL *PFNCCOL;
|
|
typedef class SRCCOL *PSRCCOL;
|
|
|
|
/***********************************************************************/
|
|
/* This class is used to generate PIVOT table column definitions. */
|
|
/***********************************************************************/
|
|
class PIVAID : public CSORT {
|
|
friend class FNCCOL;
|
|
friend class SRCCOL;
|
|
public:
|
|
// Constructor
|
|
PIVAID(const char *tab, const char *src, const char *picol,
|
|
const char *fncol, const char *skcol, const char *host,
|
|
const char *db, const char *user, const char *pwd, int port);
|
|
|
|
// Methods
|
|
PQRYRES MakePivotColumns(PGLOBAL g);
|
|
bool SkipColumn(PCOLRES crp, char *skc);
|
|
|
|
// The sorting function
|
|
virtual int Qcompare(int *, int *);
|
|
|
|
protected:
|
|
// Members
|
|
MYSQLC Myc; // MySQL connection class
|
|
PCSZ Host; // Host machine to use
|
|
PCSZ User; // User logon info
|
|
PCSZ Pwd; // Password logon info
|
|
PCSZ Database; // Database to be used by server
|
|
PQRYRES Qryp; // Points to Query result block
|
|
PCSZ Tabname; // Name of source table
|
|
PCSZ Tabsrc; // SQL of source table
|
|
PCSZ Picol; // Pivot column name
|
|
PCSZ Fncol; // Function column name
|
|
PCSZ Skcol; // Skipped columns
|
|
PVBLK Rblkp; // The value block of the pivot column
|
|
int Port; // MySQL port number
|
|
}; // end of class PIVAID
|
|
|
|
/* -------------------------- PIVOT classes -------------------------- */
|
|
|
|
/***********************************************************************/
|
|
/* PIVOT: table that provides a view of a source table where the */
|
|
/* pivot column is expended in as many columns as there are distinct */
|
|
/* values in it and containing the function value matching other cols.*/
|
|
/***********************************************************************/
|
|
|
|
/***********************************************************************/
|
|
/* PIVOT table. */
|
|
/***********************************************************************/
|
|
class PIVOTDEF : public PRXDEF { /* Logical table description */
|
|
friend class TDBPIVOT;
|
|
public:
|
|
// Constructor
|
|
PIVOTDEF(void);
|
|
|
|
// Implementation
|
|
virtual const char *GetType(void) {return "PIVOT";}
|
|
|
|
// Methods
|
|
virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
|
|
virtual PTDB GetTable(PGLOBAL g, MODE m);
|
|
|
|
protected:
|
|
// Members
|
|
char *Host; /* Host machine to use */
|
|
char *User; /* User logon info */
|
|
char *Pwd; /* Password logon info */
|
|
char *DB; /* Database to be used by server */
|
|
char *Tabname; /* Name of source table */
|
|
char *Tabsrc; /* The source table SQL description */
|
|
char *Picol; /* The pivot column */
|
|
char *Fncol; /* The function column */
|
|
char *Function; /* The function applying to group by */
|
|
bool GBdone; /* True if tabname as group by format */
|
|
bool Accept; /* TRUE if no match is accepted */
|
|
int Port; /* MySQL port number */
|
|
}; // end of PIVOTDEF
|
|
|
|
/***********************************************************************/
|
|
/* This is the class declaration for the PIVOT table. */
|
|
/***********************************************************************/
|
|
class TDBPIVOT : public TDBPRX {
|
|
friend class FNCCOL;
|
|
public:
|
|
// Constructor
|
|
TDBPIVOT(PPIVOTDEF tdp);
|
|
|
|
// Implementation
|
|
virtual AMT GetAmType(void) {return TYPE_AM_PIVOT;}
|
|
|
|
// Methods
|
|
virtual int GetRecpos(void) {return N;}
|
|
virtual void ResetDB(void) {N = 0;}
|
|
virtual int RowNumber(PGLOBAL g, bool b = FALSE);
|
|
|
|
// Database routines
|
|
virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
|
|
virtual int Cardinality(PGLOBAL g) {return (g) ? 10 : 0;}
|
|
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);
|
|
|
|
protected:
|
|
// Internal routines
|
|
bool FindDefaultColumns(PGLOBAL g);
|
|
bool GetSourceTable(PGLOBAL g);
|
|
bool MakePivotColumns(PGLOBAL g);
|
|
bool MakeViewColumns(PGLOBAL g);
|
|
|
|
// Members
|
|
char *Host; // Host machine to use
|
|
char *User; // User logon info
|
|
char *Pwd; // Password logon info
|
|
char *Database; // Database to be used by server
|
|
char *Tabname; // Name of source table
|
|
char *Tabsrc; // SQL of source table
|
|
char *Picol; // Pivot column name
|
|
char *Fncol; // Function column name
|
|
char *Function; // The function applying to group by
|
|
PCOL Fcolp; // To the function column in source
|
|
PCOL Xcolp; // To the pivot column in source
|
|
PCOL Dcolp; // To the dump column
|
|
bool GBdone; // True when subtable is "Group by"
|
|
bool Accept; // TRUE if no match is accepted
|
|
int Mult; // Multiplication factor
|
|
int Ncol; // The number of generated columns
|
|
int N; // The current table index
|
|
int M; // The occurence rank
|
|
int Port; // MySQL port number
|
|
BYTE FileStatus; // 0: First 1: Rows 2: End-of-File
|
|
BYTE RowFlag; // 0: Ok, 1: Same, 2: Skip
|
|
}; // end of class TDBPIVOT
|
|
|
|
/***********************************************************************/
|
|
/* Class FNCCOL: for the multiple generated column. */
|
|
/***********************************************************************/
|
|
class FNCCOL : public COLBLK {
|
|
friend class TDBPIVOT;
|
|
public:
|
|
// Constructor
|
|
FNCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i);
|
|
|
|
// Implementation
|
|
virtual int GetAmType(void) {return TYPE_AM_FNC;}
|
|
|
|
// Methods
|
|
virtual void Reset(void) {}
|
|
bool InitColumn(PGLOBAL g);
|
|
bool CompareColumn(void);
|
|
|
|
protected:
|
|
// Member
|
|
PVAL Hval; // The value containing the header
|
|
PCOL Xcolp;
|
|
}; // end of class FNCCOL
|
|
|
|
/***********************************************************************/
|
|
/* Class SRCCOL: for other source columns. */
|
|
/***********************************************************************/
|
|
class SRCCOL : public PRXCOL {
|
|
friend class TDBPIVOT;
|
|
public:
|
|
// Constructors
|
|
SRCCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int n);
|
|
|
|
// Implementation
|
|
virtual int GetAmType(void) {return TYPE_AM_SRC;}
|
|
|
|
// Methods
|
|
using PRXCOL::Init;
|
|
virtual void Reset(void) {}
|
|
void SetColumn(void);
|
|
virtual bool Init(PGLOBAL g, PTDB tp);
|
|
bool CompareLast(void);
|
|
|
|
protected:
|
|
// Default constructor not to be used
|
|
SRCCOL(void) = default;
|
|
|
|
// Members
|
|
}; // end of class SRCCOL
|
|
|
|
PQRYRES PivotColumns(PGLOBAL g, const char *tab, const char *src,
|
|
const char *picol, const char *fncol,
|
|
const char *skcol, const char *host,
|
|
const char *db, const char *user,
|
|
const char *pwd, int port);
|