mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
db0c28eff8
Find and fix missing virtual override markings. Updates cmake maintainer flags to include -Wsuggest-override and -Winconsistent-missing-override.
254 lines
10 KiB
C++
254 lines
10 KiB
C++
// TDBMYSQL.H Olivier Bertrand 2007-2017
|
|
#include "myconn.h" // MySQL connection declares
|
|
|
|
typedef class MYSQLDEF *PMYDEF;
|
|
typedef class TDBMYSQL *PTDBMY;
|
|
typedef class MYSQLCOL *PMYCOL;
|
|
typedef class TDBMYEXC *PTDBMYX;
|
|
typedef class MYXCOL *PMYXCOL;
|
|
typedef class MYSQLC *PMYC;
|
|
|
|
/* ------------------------- MYSQL classes --------------------------- */
|
|
|
|
/***********************************************************************/
|
|
/* MYSQL: table type that are MySQL tables. */
|
|
/* Using embedded MySQL library (or optionally calling a MySQL server)*/
|
|
/***********************************************************************/
|
|
|
|
/***********************************************************************/
|
|
/* MYSQL table. */
|
|
/***********************************************************************/
|
|
class MYSQLDEF : public EXTDEF {/* Logical table description */
|
|
friend class TDBMYSQL;
|
|
friend class TDBMYEXC;
|
|
friend class TDBMCL;
|
|
friend class ha_connect;
|
|
public:
|
|
// Constructor
|
|
MYSQLDEF(void);
|
|
|
|
// Implementation
|
|
const char *GetType(void) override {return "MYSQL";}
|
|
inline PSZ GetHostname(void) {return Hostname;};
|
|
//inline PSZ GetDatabase(void) {return Tabschema;};
|
|
//inline PSZ GetTabname(void) {return Tabname;}
|
|
//inline PSZ GetSrcdef(void) {return Srcdef;}
|
|
//inline PSZ GetUsername(void) {return Username;};
|
|
//inline PSZ GetPassword(void) {return Password;};
|
|
inline int GetPortnumber(void) {return Portnumber;}
|
|
|
|
// Methods
|
|
//virtual int Indexable(void) {return 2;}
|
|
bool DefineAM(PGLOBAL g, LPCSTR am, int poff) override;
|
|
PTDB GetTable(PGLOBAL g, MODE m) override;
|
|
bool ParseURL(PGLOBAL g, char *url, bool b = true);
|
|
bool GetServerInfo(PGLOBAL g, const char *server_name);
|
|
|
|
protected:
|
|
// Members
|
|
PSZ Hostname; /* Host machine to use */
|
|
//PSZ Tabschema; /* Database to be used by server */
|
|
//PSZ Tabname; /* External table name */
|
|
//PSZ Srcdef; /* The source table SQL definition */
|
|
//PSZ Username; /* User logon name */
|
|
//PSZ Password; /* Password logon info */
|
|
PSZ Server; /* PServerID */
|
|
//PSZ Qrystr; /* The original query */
|
|
int Portnumber; /* MySQL port number (0 = default) */
|
|
//int Maxerr; /* Maxerr for an Exec table */
|
|
//int Quoted; /* Identifier quoting level */
|
|
bool Isview; /* true if this table is a MySQL view */
|
|
bool Bind; /* Use prepared statement on insert */
|
|
bool Delayed; /* Delayed insert */
|
|
bool Ignored; /* Use insert IGNORE */
|
|
//bool Xsrc; /* Execution type */
|
|
bool Huge; /* True for big table */
|
|
}; // end of MYSQLDEF
|
|
|
|
/***********************************************************************/
|
|
/* This is the class declaration for the MYSQL table. */
|
|
/***********************************************************************/
|
|
class TDBMYSQL : public TDBEXT {
|
|
friend class MYSQLCOL;
|
|
friend class TDBTBM;
|
|
public:
|
|
// Constructor
|
|
TDBMYSQL(PMYDEF tdp);
|
|
TDBMYSQL(PTDBMY tdbp);
|
|
|
|
// Implementation
|
|
AMT GetAmType(void) override {return TYPE_AM_MYSQL;}
|
|
PTDB Duplicate(PGLOBAL g) override {return (PTDB)new(g) TDBMYSQL(this);}
|
|
|
|
// Methods
|
|
PTDB Clone(PTABS t) override;
|
|
//virtual int GetAffectedRows(void) {return AftRows;}
|
|
int GetRecpos(void) override {return N;}
|
|
int GetProgMax(PGLOBAL g) override;
|
|
void ResetDB(void) override {N = 0;}
|
|
int RowNumber(PGLOBAL g, bool b = false) override;
|
|
bool IsView(void) override {return Isview;}
|
|
PCSZ GetServer(void) override {return Server;}
|
|
void SetDatabase(LPCSTR db) {Schema = (char*)db;}
|
|
|
|
// Schema routines
|
|
PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n) override;
|
|
int Cardinality(PGLOBAL g) override;
|
|
//int GetMaxSize(PGLOBAL g) override;
|
|
bool OpenDB(PGLOBAL g) override;
|
|
int ReadDB(PGLOBAL g) override;
|
|
int WriteDB(PGLOBAL g) override;
|
|
int DeleteDB(PGLOBAL g, int irc) override;
|
|
void CloseDB(PGLOBAL g) override;
|
|
bool ReadKey(PGLOBAL g, OPVAL op, const key_range *kr) override;
|
|
|
|
// Specific routines
|
|
bool SetColumnRanks(PGLOBAL g);
|
|
PCOL MakeFieldColumn(PGLOBAL g, char *name);
|
|
PSZ FindFieldColumn(char *name);
|
|
|
|
protected:
|
|
// Internal functions
|
|
bool MakeSelect(PGLOBAL g, bool mx);
|
|
bool MakeInsert(PGLOBAL g);
|
|
int BindColumns(PGLOBAL g __attribute__((unused)));
|
|
bool MakeCommand(PGLOBAL g) override;
|
|
//int MakeUpdate(PGLOBAL g);
|
|
//int MakeDelete(PGLOBAL g);
|
|
int SendCommand(PGLOBAL g);
|
|
|
|
// Members
|
|
MYSQLC Myc; // MySQL connection class
|
|
MYSQL_BIND *Bind; // To the MySQL bind structure array
|
|
//PSTRG Query; // Constructed SQL query
|
|
char *Host; // Host machine to use
|
|
//char *User; // User logon info
|
|
//char *Pwd; // Password logon info
|
|
//char *Schema; // Database to be used by server
|
|
//char *TableName; // External table name
|
|
//char *Srcdef; // The source table SQL definition
|
|
char *Server; // The server ID
|
|
//char *Qrystr; // The original query
|
|
bool Fetched; // True when fetch was done
|
|
bool Isview; // True if this table is a MySQL view
|
|
bool Prep; // Use prepared statement on insert
|
|
bool Delayed; // Use delayed insert
|
|
bool Ignored; // Use insert IGNORE
|
|
int m_Rc; // Return code from command
|
|
//int AftRows; // The number of affected rows
|
|
int N; // The current table index
|
|
unsigned Port; // MySQL port number (0 = default)
|
|
//int Nparm; // The number of statement parameters
|
|
//int Quoted; // The identifier quoting level
|
|
}; // end of class TDBMYSQL
|
|
|
|
/***********************************************************************/
|
|
/* Class MYSQLCOL: MySQL table column. */
|
|
/***********************************************************************/
|
|
class MYSQLCOL : public COLBLK {
|
|
friend class TDBMYSQL;
|
|
public:
|
|
// Constructors
|
|
MYSQLCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am = "MYSQL");
|
|
MYSQLCOL(MYSQL_FIELD *fld, PTDB tdbp, int i, PCSZ am = "MYSQL");
|
|
MYSQLCOL(MYSQLCOL *colp, PTDB tdbp); // Constructor used in copy process
|
|
|
|
// Implementation
|
|
int GetAmType(void) override {return TYPE_AM_MYSQL;}
|
|
void InitBind(PGLOBAL g);
|
|
|
|
// Methods
|
|
bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check) override;
|
|
void ReadColumn(PGLOBAL g) override;
|
|
void WriteColumn(PGLOBAL g) override;
|
|
bool FindRank(PGLOBAL g);
|
|
|
|
protected:
|
|
// Members
|
|
MYSQL_BIND *Bind; // This column bind structure pointer
|
|
PVAL To_Val; // To value used for Update/Insert
|
|
unsigned long Slen; // Bind string lengh
|
|
int Rank; // Rank (position) number in the query
|
|
}; // end of class MYSQLCOL
|
|
|
|
/***********************************************************************/
|
|
/* This is the class declaration for the exec command MYSQL table. */
|
|
/***********************************************************************/
|
|
class TDBMYEXC : public TDBMYSQL {
|
|
friend class MYXCOL;
|
|
public:
|
|
// Constructors
|
|
TDBMYEXC(PMYDEF tdp);
|
|
TDBMYEXC(PTDBMYX tdbp);
|
|
|
|
// Implementation
|
|
AMT GetAmType(void) override {return TYPE_AM_MYX;}
|
|
PTDB Duplicate(PGLOBAL g) override {return (PTDB)new(g) TDBMYEXC(this);}
|
|
|
|
// Methods
|
|
PTDB Clone(PTABS t) override;
|
|
bool IsView(void) override {return Isview;}
|
|
|
|
// Database routines
|
|
PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n) override;
|
|
int GetMaxSize(PGLOBAL g) override;
|
|
bool OpenDB(PGLOBAL g) override;
|
|
int ReadDB(PGLOBAL g) override;
|
|
int WriteDB(PGLOBAL g) override;
|
|
|
|
protected:
|
|
// Internal functions
|
|
PCMD MakeCMD(PGLOBAL g);
|
|
|
|
// Members
|
|
PCMD Cmdlist; // The commands to execute
|
|
char *Cmdcol; // The name of the Xsrc command column
|
|
bool Shw; // Show warnings
|
|
bool Havew; // True when processing warnings
|
|
bool Isw; // True for warning lines
|
|
int Warnings; // Warnings number
|
|
int Mxr; // Maximum errors before closing
|
|
int Nerr; // Number of errors so far
|
|
}; // end of class TDBMYEXC
|
|
|
|
/***********************************************************************/
|
|
/* Class MYXCOL: MySQL exec command table column. */
|
|
/***********************************************************************/
|
|
class MYXCOL : public MYSQLCOL {
|
|
friend class TDBMYEXC;
|
|
public:
|
|
// Constructors
|
|
MYXCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am = "MYSQL");
|
|
MYXCOL(MYSQL_FIELD *fld, PTDB tdbp, int i, PCSZ am = "MYSQL");
|
|
MYXCOL(MYXCOL *colp, PTDB tdbp); // Constructor used in copy process
|
|
|
|
// Methods
|
|
void ReadColumn(PGLOBAL g) override;
|
|
void WriteColumn(PGLOBAL g) override;
|
|
|
|
protected:
|
|
// Members
|
|
char *Buffer; // To get returned message
|
|
int Flag; // Column content desc
|
|
}; // end of class MYXCOL
|
|
|
|
/***********************************************************************/
|
|
/* This is the class declaration for the MYSQL column catalog table. */
|
|
/***********************************************************************/
|
|
class TDBMCL : public TDBCAT {
|
|
public:
|
|
// Constructor
|
|
TDBMCL(PMYDEF tdp);
|
|
|
|
protected:
|
|
// Specific routines
|
|
PQRYRES GetResult(PGLOBAL g) override;
|
|
|
|
// Members
|
|
PCSZ Host; // Host machine to use
|
|
PCSZ Db; // Database to be used by server
|
|
PCSZ Tab; // External table name
|
|
PCSZ User; // User logon name
|
|
PCSZ Pwd; // Password logon info
|
|
int Port; // MySQL port number (0 = default)
|
|
}; // end of class TDBMCL
|