mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
c8388de2fd
e.g. - dont -> don't - occurence -> occurrence - succesfully -> successfully - easyly -> easily Also remove trailing space in selected files. These changes span: - server core - Connect and Innobase storage engine code - OQgraph, Sphinx and TokuDB storage engines Related to MDEV-21769.
200 lines
8.1 KiB
C++
200 lines
8.1 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 occurrence 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) {}
|
|
|
|
// 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);
|