// TDBMYSQL.H Olivier Bertrand 2007-2012 #include "myconn.h" // MySQL connection declares typedef class MYSQLDEF *PMYDEF; typedef class TDBMYSQL *PTDBMY; typedef class MYSQLC *PMYC; typedef class MYSQLCOL *PMYCOL; /* ------------------------- MYSQL classes --------------------------- */ /***********************************************************************/ /* MYSQL: table type that are MySQL tables. */ /* Using embedded MySQL library (or optionally calling a MySQL server)*/ /***********************************************************************/ /***********************************************************************/ /* MYSQL table. */ /***********************************************************************/ class MYSQLDEF : public TABDEF {/* Logical table description */ friend class TDBMYSQL; public: // Constructor MYSQLDEF(void); // Implementation virtual const char *GetType(void) {return "MYSQL";} inline PSZ GetHostname(void) {return Hostname;}; inline PSZ GetDatabase(void) {return Database;}; inline PSZ GetTabname(void) {return Tabname;} inline PSZ GetUsername(void) {return Username;}; inline PSZ GetPassword(void) {return Password;}; inline int GetPortnumber(void) {return Portnumber;} // Methods virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff); virtual PTDB GetTable(PGLOBAL g, MODE m); protected: // Members PSZ Hostname; /* Host machine to use */ PSZ Database; /* Database to be used by server */ PSZ Tabname; /* External table name */ PSZ Username; /* User logon name */ PSZ Password; /* Password logon info */ int Portnumber; /* MySQL port number (0 = default) */ bool Bind; /* Use prepared statement on insert */ bool Delayed; /* Delayed insert */ }; // end of MYSQLDEF /***********************************************************************/ /* This is the class declaration for the MYSQL table. */ /***********************************************************************/ class TDBMYSQL : public TDBASE { friend class MYSQLCOL; public: // Constructor TDBMYSQL(PMYDEF tdp); TDBMYSQL(PGLOBAL g, PTDBMY tdbp); // Implementation virtual AMT GetAmType(void) {return TYPE_AM_MYSQL;} virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBMYSQL(g, this);} // Methods virtual PTDB CopyOne(PTABS t); virtual int GetAffectedRows(void) {return AftRows;} virtual int GetRecpos(void) {return N;} virtual int GetProgMax(PGLOBAL g); 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 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 functions bool MakeSelect(PGLOBAL g); bool MakeInsert(PGLOBAL g); //bool MakeUpdate(PGLOBAL g); //bool MakeDelete(PGLOBAL g); int BindColumns(PGLOBAL g); // Members MYSQLC Myc; // MySQL connection class MYSQL_BIND *Bind; // To the MySQL bind structure array 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; // External table name char *Query; // Points to SQL query char *Qbuf; // Used for not prepared insert bool Fetched; // True when fetch was done bool Prep; // Use prepared statement on insert bool Delayed; // Use delayed insert int m_Rc; // Return code from command int AftRows; // The number of affected rows int N; // The current table index int Port; // MySQL port number (0 = default) int Nparm; // The number of statement parameters }; // 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, PSZ am = "MYSQL"); MYSQLCOL(MYSQLCOL *colp, PTDB tdbp); // Constructor used in copy process // Implementation virtual int GetAmType(void) {return TYPE_AM_MYSQL;} void InitBind(PGLOBAL g); // Methods virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); virtual void ReadColumn(PGLOBAL g); virtual void WriteColumn(PGLOBAL g); protected: // Default constructor not to be used MYSQLCOL(void) {} // 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 PQRYRES MyColumns(PGLOBAL g, const char *host, const char *db, const char *user, const char *pwd, const char *table, const char *colpat, int port, bool key);