hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
MysqlLite.cpp
Go to the documentation of this file.
1 #include <MysqlLite.h>
2 MysqlLite::MysqlLite(const char *host, const char *user, const char *passwd,
3  const char *db, unsigned int port, const char *socket, bool connectNow)
4 {
5  connected = false;
6  if(connectNow)
7  {
8  sql = mysql_init(NULL);
9  my_bool reconnect = true;
10  mysql_options(sql, MYSQL_OPT_RECONNECT, (const char*)&reconnect);
11  if (mysql_real_connect(sql, host, user, passwd, db, port, socket, 0))
12  {
13  connected = true;
14  mysql_options(sql, MYSQL_OPT_RECONNECT, (const char*)&reconnect);
15  }
16  }
17  else
18  {
19  sql = NULL;
20  }
21  if(host)this->host = strdup(host);
22  if(user)this->user = strdup(user);
23  if(passwd)this->passwd = strdup(passwd);
24  if(db)this->db = strdup(db);
25  this->port = port;
26  if(socket)this->socket = strdup(socket);
27  else this->socket = NULL;
28 }
29 
31 {
32  if(sql)mysql_close(sql);
33  if(host)free(host);
34  if(user)free(user);
35  if(passwd)free(passwd);
36  if(db)free(db);
37  if(socket)free(socket);
38  mysql_library_end();
39 }
40 
41 void MysqlLite::setTimeout(unsigned int readTimeout, unsigned int writeTimeout)
42 {
43  if(sql)
44  {
45  mysql_options(sql, MYSQL_OPT_READ_TIMEOUT, (const char*)&readTimeout);
46  mysql_options(sql, MYSQL_OPT_WRITE_TIMEOUT, (const char*)&writeTimeout);
47  }
48 }
49 
51 {
52  return sql != NULL ? (mysql_ping(sql) == 0) : false;
53 }
54 
56 {
57  if(sql && connected)
58  {
59  mysql_close(sql);
60  sql = NULL;
61  }
62 }
63 
65 {
66  if(sql)mysql_close(sql);
67  sql = mysql_init(NULL);
68  if (mysql_real_connect(sql, host, user, passwd, db, port, socket, 0))
69  {
70  connected = true;
71  my_bool reconnect = true;
72  mysql_options(sql, MYSQL_OPT_RECONNECT, (const char*)&reconnect);
73  }
74  else
75  {
76  connected = false;
77  }
78  return connected;
79 }
80 
81 bool MysqlLite::setCharacterSet(const char *character)
82 {
83  if(sql && mysql_set_character_set(sql, character) == 0)
84  {
85  return true;
86  }
87  return false;
88 }
89 bool MysqlLite::query(const char *pattern, ...)
90 {
91  char *data = NULL;
92  int n, size = 100;
93  va_list ap;
94  if (!sql || (data = (char *) malloc(size)) == NULL)
95  {
96  return false;
97  }
98  while (1)
99  {
100  va_start(ap, pattern);
101  n = vsnprintf(data, size, pattern, ap);
102  va_end(ap);
103  if (n > -1 && n < size)
104  {
105  break;
106  }
107  if (n > -1)
108  size = n + 1;
109  else
110  size *= 2;
111  if ((data = (char *) realloc(data, size)) == NULL)
112  {
113  return false;
114  }
115  }
116  if (mysql_query(sql, data) == 0)
117  {
118  free(data);
119  return true;
120  }
121  else
122  {
123  free(data);
124  return false;
125  }
126 }
127 
128 MYSQL_RES *MysqlLite::store()
129 {
130  return mysql_store_result(sql);
131 }
132 
133 MYSQL_RES *MysqlLite::use()
134 {
135  return mysql_use_result(sql);
136 }
137 
138 MYSQL_ROW MysqlLite::fetch(MYSQL_RES * res)
139 {
140  return mysql_fetch_row(res);
141 }
142 
144 {
145  return connected;
146 }
147 
148 my_ulonglong MysqlLite::insertId()
149 {
150  return mysql_insert_id(sql);
151 }
152 
153 const char *MysqlLite::errorStr()
154 {
155  return mysql_error(sql);
156 }
157 
158 const char *MysqlLite::errStr()
159 {
160  return mysql_error(this->sql);
161 }
162 
163 unsigned int MysqlLite::errNo()
164 {
165  return mysql_errno(this->sql);
166 }
167 
168 char *MysqlLite::escapeStr(const char *str)
169 {
170  char *result = NULL;
171  if (str)
172  {
173  unsigned long len = strlen(str);
174  if( (result = (char *) malloc((len << 1) + 1)) == NULL )
175  {
176  return NULL;
177  }
178  len = mysql_real_escape_string(this->sql, result, str, len);
179  result[len] = '\0';
180  result = (char *) realloc(result, len + 1);
181  }
182  return result;
183 }
184 
186 {
187  return mysql_affected_rows(this->sql);
188 }
189 
190 my_ulonglong MysqlLite::numRows(MYSQL_RES * res)
191 {
192  return mysql_num_rows(res);
193 }
194 
196 {
197  bindParam = NULL;
198  stmt = mysql_stmt_init(sql->sql);
199  if(stmt)
200  {
201  if(!mysql_stmt_prepare(stmt, query, strlen(query)))
202  {
203  paramCount= mysql_stmt_param_count(stmt);
204  if(paramCount)
205  {
206  bindParam = new MYSQL_BIND[paramCount];
207  bzero(bindParam, sizeof(MYSQL_BIND) * paramCount);
208  }
209  }
210  }
211 }
212 
214 {
215  if(bindParam)delete []bindParam;
216  mysql_stmt_close(stmt);
217 }
218 
220 {
221  return mysql_stmt_execute(stmt)==0;
222 }
223 
225 {
226  if(index < paramCount)
227  {
228  return &(bindParam[index]);
229  }
230  return NULL;
231 }
232 
234 {
235  return mysql_stmt_bind_param(stmt, bindParam) == 0;
236 }
237 
239 {
240  return mysql_stmt_error(stmt);
241 }
242