summaryrefslogtreecommitdiff
path: root/storage/connect/tabmysql.h
blob: bdd4a80377a45f280dbd0d297e5da062bfd1fc76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// 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