| 1 | // TDBMYSQL.H Olivier Bertrand 2007-2017 |
| 2 | #include "myconn.h" // MySQL connection declares |
| 3 | |
| 4 | typedef class MYSQLDEF *PMYDEF; |
| 5 | typedef class TDBMYSQL *PTDBMY; |
| 6 | typedef class MYSQLCOL *PMYCOL; |
| 7 | typedef class TDBMYEXC *PTDBMYX; |
| 8 | typedef class MYXCOL *PMYXCOL; |
| 9 | typedef class MYSQLC *PMYC; |
| 10 | |
| 11 | /* ------------------------- MYSQL classes --------------------------- */ |
| 12 | |
| 13 | /***********************************************************************/ |
| 14 | /* MYSQL: table type that are MySQL tables. */ |
| 15 | /* Using embedded MySQL library (or optionally calling a MySQL server)*/ |
| 16 | /***********************************************************************/ |
| 17 | |
| 18 | /***********************************************************************/ |
| 19 | /* MYSQL table. */ |
| 20 | /***********************************************************************/ |
| 21 | class MYSQLDEF : public EXTDEF {/* Logical table description */ |
| 22 | friend class TDBMYSQL; |
| 23 | friend class TDBMYEXC; |
| 24 | friend class TDBMCL; |
| 25 | friend class ha_connect; |
| 26 | public: |
| 27 | // Constructor |
| 28 | MYSQLDEF(void); |
| 29 | |
| 30 | // Implementation |
| 31 | virtual const char *GetType(void) {return "MYSQL" ;} |
| 32 | inline PSZ GetHostname(void) {return Hostname;}; |
| 33 | //inline PSZ GetDatabase(void) {return Tabschema;}; |
| 34 | //inline PSZ GetTabname(void) {return Tabname;} |
| 35 | //inline PSZ GetSrcdef(void) {return Srcdef;} |
| 36 | //inline PSZ GetUsername(void) {return Username;}; |
| 37 | //inline PSZ GetPassword(void) {return Password;}; |
| 38 | inline int GetPortnumber(void) {return Portnumber;} |
| 39 | |
| 40 | // Methods |
| 41 | //virtual int Indexable(void) {return 2;} |
| 42 | virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff); |
| 43 | virtual PTDB GetTable(PGLOBAL g, MODE m); |
| 44 | bool ParseURL(PGLOBAL g, char *url, bool b = true); |
| 45 | bool GetServerInfo(PGLOBAL g, const char *server_name); |
| 46 | |
| 47 | protected: |
| 48 | // Members |
| 49 | PSZ Hostname; /* Host machine to use */ |
| 50 | //PSZ Tabschema; /* Database to be used by server */ |
| 51 | //PSZ Tabname; /* External table name */ |
| 52 | //PSZ Srcdef; /* The source table SQL definition */ |
| 53 | //PSZ Username; /* User logon name */ |
| 54 | //PSZ Password; /* Password logon info */ |
| 55 | PSZ Server; /* PServerID */ |
| 56 | //PSZ Qrystr; /* The original query */ |
| 57 | int Portnumber; /* MySQL port number (0 = default) */ |
| 58 | //int Maxerr; /* Maxerr for an Exec table */ |
| 59 | //int Quoted; /* Identifier quoting level */ |
| 60 | bool Isview; /* true if this table is a MySQL view */ |
| 61 | bool Bind; /* Use prepared statement on insert */ |
| 62 | bool Delayed; /* Delayed insert */ |
| 63 | //bool Xsrc; /* Execution type */ |
| 64 | bool Huge; /* True for big table */ |
| 65 | }; // end of MYSQLDEF |
| 66 | |
| 67 | /***********************************************************************/ |
| 68 | /* This is the class declaration for the MYSQL table. */ |
| 69 | /***********************************************************************/ |
| 70 | class TDBMYSQL : public TDBEXT { |
| 71 | friend class MYSQLCOL; |
| 72 | friend class TDBTBM; |
| 73 | public: |
| 74 | // Constructor |
| 75 | TDBMYSQL(PMYDEF tdp); |
| 76 | TDBMYSQL(PTDBMY tdbp); |
| 77 | |
| 78 | // Implementation |
| 79 | virtual AMT GetAmType(void) {return TYPE_AM_MYSQL;} |
| 80 | virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBMYSQL(this);} |
| 81 | |
| 82 | // Methods |
| 83 | virtual PTDB Clone(PTABS t); |
| 84 | //virtual int GetAffectedRows(void) {return AftRows;} |
| 85 | virtual int GetRecpos(void) {return N;} |
| 86 | virtual int GetProgMax(PGLOBAL g); |
| 87 | virtual void ResetDB(void) {N = 0;} |
| 88 | virtual int RowNumber(PGLOBAL g, bool b = false); |
| 89 | virtual bool IsView(void) {return Isview;} |
| 90 | virtual PCSZ GetServer(void) {return Server;} |
| 91 | void SetDatabase(LPCSTR db) {Schema = (char*)db;} |
| 92 | |
| 93 | // Schema routines |
| 94 | virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); |
| 95 | virtual int Cardinality(PGLOBAL g); |
| 96 | //virtual int GetMaxSize(PGLOBAL g); |
| 97 | virtual bool OpenDB(PGLOBAL g); |
| 98 | virtual int ReadDB(PGLOBAL g); |
| 99 | virtual int WriteDB(PGLOBAL g); |
| 100 | virtual int DeleteDB(PGLOBAL g, int irc); |
| 101 | virtual void CloseDB(PGLOBAL g); |
| 102 | virtual bool ReadKey(PGLOBAL g, OPVAL op, const key_range *kr); |
| 103 | |
| 104 | // Specific routines |
| 105 | bool SetColumnRanks(PGLOBAL g); |
| 106 | PCOL MakeFieldColumn(PGLOBAL g, char *name); |
| 107 | PSZ FindFieldColumn(char *name); |
| 108 | |
| 109 | protected: |
| 110 | // Internal functions |
| 111 | bool MakeSelect(PGLOBAL g, bool mx); |
| 112 | bool MakeInsert(PGLOBAL g); |
| 113 | int BindColumns(PGLOBAL g __attribute__((unused))); |
| 114 | virtual bool MakeCommand(PGLOBAL g); |
| 115 | //int MakeUpdate(PGLOBAL g); |
| 116 | //int MakeDelete(PGLOBAL g); |
| 117 | int SendCommand(PGLOBAL g); |
| 118 | |
| 119 | // Members |
| 120 | MYSQLC Myc; // MySQL connection class |
| 121 | MYSQL_BIND *Bind; // To the MySQL bind structure array |
| 122 | //PSTRG Query; // Constructed SQL query |
| 123 | char *Host; // Host machine to use |
| 124 | //char *User; // User logon info |
| 125 | //char *Pwd; // Password logon info |
| 126 | //char *Schema; // Database to be used by server |
| 127 | //char *TableName; // External table name |
| 128 | //char *Srcdef; // The source table SQL definition |
| 129 | char *Server; // The server ID |
| 130 | //char *Qrystr; // The original query |
| 131 | bool Fetched; // True when fetch was done |
| 132 | bool Isview; // True if this table is a MySQL view |
| 133 | bool Prep; // Use prepared statement on insert |
| 134 | bool Delayed; // Use delayed insert |
| 135 | int m_Rc; // Return code from command |
| 136 | //int AftRows; // The number of affected rows |
| 137 | int N; // The current table index |
| 138 | unsigned Port; // MySQL port number (0 = default) |
| 139 | //int Nparm; // The number of statement parameters |
| 140 | //int Quoted; // The identifier quoting level |
| 141 | }; // end of class TDBMYSQL |
| 142 | |
| 143 | /***********************************************************************/ |
| 144 | /* Class MYSQLCOL: MySQL table column. */ |
| 145 | /***********************************************************************/ |
| 146 | class MYSQLCOL : public COLBLK { |
| 147 | friend class TDBMYSQL; |
| 148 | public: |
| 149 | // Constructors |
| 150 | MYSQLCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am = "MYSQL" ); |
| 151 | MYSQLCOL(MYSQL_FIELD *fld, PTDB tdbp, int i, PCSZ am = "MYSQL" ); |
| 152 | MYSQLCOL(MYSQLCOL *colp, PTDB tdbp); // Constructor used in copy process |
| 153 | |
| 154 | // Implementation |
| 155 | virtual int GetAmType(void) {return TYPE_AM_MYSQL;} |
| 156 | void InitBind(PGLOBAL g); |
| 157 | |
| 158 | // Methods |
| 159 | virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); |
| 160 | virtual void ReadColumn(PGLOBAL g); |
| 161 | virtual void WriteColumn(PGLOBAL g); |
| 162 | bool FindRank(PGLOBAL g); |
| 163 | |
| 164 | protected: |
| 165 | // Members |
| 166 | MYSQL_BIND *Bind; // This column bind structure pointer |
| 167 | PVAL To_Val; // To value used for Update/Insert |
| 168 | unsigned long Slen; // Bind string lengh |
| 169 | int Rank; // Rank (position) number in the query |
| 170 | }; // end of class MYSQLCOL |
| 171 | |
| 172 | /***********************************************************************/ |
| 173 | /* This is the class declaration for the exec command MYSQL table. */ |
| 174 | /***********************************************************************/ |
| 175 | class TDBMYEXC : public TDBMYSQL { |
| 176 | friend class MYXCOL; |
| 177 | public: |
| 178 | // Constructors |
| 179 | TDBMYEXC(PMYDEF tdp); |
| 180 | TDBMYEXC(PTDBMYX tdbp); |
| 181 | |
| 182 | // Implementation |
| 183 | virtual AMT GetAmType(void) {return TYPE_AM_MYX;} |
| 184 | virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBMYEXC(this);} |
| 185 | |
| 186 | // Methods |
| 187 | virtual PTDB Clone(PTABS t); |
| 188 | virtual bool IsView(void) {return Isview;} |
| 189 | |
| 190 | // Database routines |
| 191 | virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); |
| 192 | virtual int GetMaxSize(PGLOBAL g); |
| 193 | virtual bool OpenDB(PGLOBAL g); |
| 194 | virtual int ReadDB(PGLOBAL g); |
| 195 | virtual int WriteDB(PGLOBAL g); |
| 196 | |
| 197 | protected: |
| 198 | // Internal functions |
| 199 | PCMD MakeCMD(PGLOBAL g); |
| 200 | |
| 201 | // Members |
| 202 | PCMD Cmdlist; // The commands to execute |
| 203 | char *Cmdcol; // The name of the Xsrc command column |
| 204 | bool Shw; // Show warnings |
| 205 | bool Havew; // True when processing warnings |
| 206 | bool Isw; // True for warning lines |
| 207 | int Warnings; // Warnings number |
| 208 | int Mxr; // Maximum errors before closing |
| 209 | int Nerr; // Number of errors so far |
| 210 | }; // end of class TDBMYEXC |
| 211 | |
| 212 | /***********************************************************************/ |
| 213 | /* Class MYXCOL: MySQL exec command table column. */ |
| 214 | /***********************************************************************/ |
| 215 | class MYXCOL : public MYSQLCOL { |
| 216 | friend class TDBMYEXC; |
| 217 | public: |
| 218 | // Constructors |
| 219 | MYXCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am = "MYSQL" ); |
| 220 | MYXCOL(MYSQL_FIELD *fld, PTDB tdbp, int i, PCSZ am = "MYSQL" ); |
| 221 | MYXCOL(MYXCOL *colp, PTDB tdbp); // Constructor used in copy process |
| 222 | |
| 223 | // Methods |
| 224 | virtual void ReadColumn(PGLOBAL g); |
| 225 | virtual void WriteColumn(PGLOBAL g); |
| 226 | |
| 227 | protected: |
| 228 | // Members |
| 229 | char *Buffer; // To get returned message |
| 230 | int Flag; // Column content desc |
| 231 | }; // end of class MYXCOL |
| 232 | |
| 233 | /***********************************************************************/ |
| 234 | /* This is the class declaration for the MYSQL column catalog table. */ |
| 235 | /***********************************************************************/ |
| 236 | class TDBMCL : public TDBCAT { |
| 237 | public: |
| 238 | // Constructor |
| 239 | TDBMCL(PMYDEF tdp); |
| 240 | |
| 241 | protected: |
| 242 | // Specific routines |
| 243 | virtual PQRYRES GetResult(PGLOBAL g); |
| 244 | |
| 245 | // Members |
| 246 | PCSZ Host; // Host machine to use |
| 247 | PCSZ Db; // Database to be used by server |
| 248 | PCSZ Tab; // External table name |
| 249 | PCSZ User; // User logon name |
| 250 | PCSZ Pwd; // Password logon info |
| 251 | int Port; // MySQL port number (0 = default) |
| 252 | }; // end of class TDBMCL |
| 253 | |