EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
DBcore Class Reference

#include "dbcore.h"

Inheritance diagram for DBcore:
Collaboration diagram for DBcore:

Public Types

enum  eStatus { Closed, Connected, Error }
 

Public Member Functions

 DBcore ()
 
 ~DBcore ()
 
void Close ()
 
void Initialize (std::string host, std::string user, std::string password, std::string database, bool compress=false, bool SSL=false, int16 port=3306, bool socket=false, bool reconnect=false, bool profile=false)
 
bool RunQuery (DBQueryResult &into, const char *query_fmt,...)
 
bool RunQuery (DBerror &err, const char *query_fmt,...)
 
bool RunQuery (DBerror &err, uint32 &affected_rows, const char *query_fmt,...)
 
bool RunQueryLID (DBerror &err, uint32 &last_insert_id, const char *query_fmt,...)
 
int32 DoEscapeString (char *tobuf, const char *frombuf, int32 fromlen)
 
void DoEscapeString (std::string &to, const std::string &from)
 
void ping ()
 
eStatus GetStatus () const
 
- Public Member Functions inherited from Singleton< DBcore >
 Singleton ()
 Primary constructor. More...
 

Static Public Member Functions

static bool IsSafeString (const char *str)
 
static bool IsSafeString (std::string &s)
 
- Static Public Member Functions inherited from Singleton< DBcore >
static DBcoreget ()
 

Protected Member Functions

MYSQL * getMySQL ()
 
void Connect (uint *errnum=0, char *errbuf=0)
 
bool Reconnect ()
 

Private Member Functions

bool DoQuery_locked (DBerror &err, const char *query, int querylen, bool retry=true)
 

Private Attributes

MYSQL * mysql
 
Mutex MDatabase
 
eStatus pStatus
 
bool pCompress
 
bool pProfile
 
bool pReconnect
 
bool pSocket
 
bool pSSL
 
int16 pPort
 
std::string pHost
 
std::string pUser
 
std::string pPassword
 
std::string pDatabase
 

Additional Inherited Members

- Static Protected Attributes inherited from Singleton< DBcore >
static std::shared_ptr< DBcoremInstance
 

Detailed Description

Definition at line 132 of file dbcore.h.

Member Enumeration Documentation

Enumerator
Closed 
Connected 
Error 

Definition at line 136 of file dbcore.h.

Constructor & Destructor Documentation

DBcore::DBcore ( )

Definition at line 49 of file dbcore.cpp.

References mysql.

50 : mysql(nullptr),
51 pSocket(false),
53 pReconnect(false),
54 pProfile(false)
55 {
56  mysql_thread_init(); // this is for each thread used for db connections
57  mysql = mysql_init(nullptr);
58 }
bool pReconnect
Definition: dbcore.h:187
bool pSocket
Definition: dbcore.h:188
eStatus pStatus
Definition: dbcore.h:183
bool pProfile
Definition: dbcore.h:186
MYSQL * mysql
Definition: dbcore.h:181
DBcore::~DBcore ( )
inline

Definition at line 139 of file dbcore.h.

139 { /* do nothing here */ }

Member Function Documentation

void DBcore::Close ( )

Definition at line 192 of file dbcore.cpp.

References Closed, mysql, and pStatus.

Referenced by Reconnect().

192  {
193  pStatus = Closed;
194  mysql_close(mysql);
195  mysql_server_end();
196  mysql_thread_end(); // this is for each thread used for db connections
197 }
eStatus pStatus
Definition: dbcore.h:183
MYSQL * mysql
Definition: dbcore.h:181

Here is the caller graph for this function:

void DBcore::Connect ( uint *  errnum = 0,
char *  errbuf = 0 
)
protected

Definition at line 60 of file dbcore.cpp.

References DBerror::c_str(), Connected, Error, mysql, pCompress, pDatabase, pHost, pPassword, pPort, pReconnect, pSocket, pSSL, pStatus, pUser, DBerror::SetError(), sLog, and snprintf.

Referenced by Initialize(), and Reconnect().

61 {
62  sLog.Cyan(" DB User", " %s", pUser.c_str());
63  sLog.Cyan(" DataBase", " %s", pDatabase.c_str());
64 
65  // options should be called BEFORE mysql_real_connect()
66  if (pSocket) {
67  enum mysql_protocol_type prot_type = MYSQL_PROTOCOL_SOCKET;
68  if (mysql_options(mysql, MYSQL_OPT_PROTOCOL, (void*)&prot_type) == 0) {
69  sLog.Cyan(" DB Server", " Unix Socket Connection");
70  } else {
71  sLog.Error(" DB Server", " Unix Socket Connection Option Failed");
72  enum mysql_protocol_type prot_type = MYSQL_PROTOCOL_TCP;
73  if (mysql_options(mysql, MYSQL_OPT_PROTOCOL, (void*)&prot_type) == 0)
74  sLog.Cyan(" DB Server", " %s:%d", pHost.c_str(), pPort);
75  else
76  sLog.Error(" DB Server", " TCP Connection Option Failed");
77  }
78  } else {
79  enum mysql_protocol_type prot_type = MYSQL_PROTOCOL_TCP;
80  if (mysql_options(mysql, MYSQL_OPT_PROTOCOL, (void*)&prot_type) == 0)
81  sLog.Cyan(" DB Server", " %s:%d", pHost.c_str(), pPort);
82  else
83  sLog.Error(" DB Server", " TCP Connection Option Failed");
84  }
85 
86  int32 flags = CLIENT_FOUND_ROWS; //2
87  if (pCompress)
88  flags |= CLIENT_COMPRESS; //32
89  // sql-ssl needs more info/settings to properly use....however, not needed when using socket under linux
90  if (pSSL and !pSocket)
91  flags |= CLIENT_SSL;
92  sLog.Cyan(" Connect Flags", " %x", flags);
93  /*
94  * unsigned int conn_timeout = 2;
95  * // not sure if this one will really be used here
96  * if (mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (void*)&conn_timeout) == 0) {
97  * if (conn_timeout > 60)
98  * sLog.Error(" DataBase Manager", "Connection Timeout set to %us", conn_timeout);
99  * else if (conn_timeout > 40)
100  * sLog.Yellow(" DataBase Manager", "Connection Timeout set to %us", conn_timeout);
101  * else if (conn_timeout > 30)
102  * sLog.Cyan(" DataBase Manager", "Connection Timeout set to %us", conn_timeout);
103  * else
104  * sLog.Green(" DataBase Manager", "Connection Timeout set to %us", conn_timeout);
105 } else
106  sLog.Error(" DataBase Manager", "Connection Timeout Option Failed");
107 */
108  if (pReconnect) {
109  my_bool reconnect = true;
110  if (mysql_options(mysql, MYSQL_OPT_RECONNECT, (void*)&reconnect) == 0) // this will enable auto-reconnect...and render my Reconnect() worthless
111  sLog.Green(" DataBase Manager", "DataBase AutoReconnect Enabled");
112  else
113  sLog.Error(" DataBase Manager", "DataBase AutoReconnect Option Failed");
114  } else
115  sLog.Yellow(" DataBase Manager", "DataBase AutoReconnect Disabled");
116 
117  if (mysql_real_connect(mysql, pHost.c_str(), pUser.c_str(), pPassword.c_str(), pDatabase.c_str(), pPort, 0, flags) == nullptr) {
118  pStatus = Error;
119  *errnum = mysql_errno(mysql);
120  if (errbuf != nullptr)
121  snprintf(errbuf, MYSQL_ERRMSG_SIZE, "#%i: %s", mysql_errno(mysql), mysql_error(mysql));
122  DBerror err;
123  err.SetError(*errnum, errbuf);
124  sLog.Error( " ServerInit", "Unable to connect to the database: %s", err.c_str() );
125  return;
126  } else {
127  pStatus = Connected;
128  //mysql_get_socket();
129  sLog.Blue(" DataBase Manager", "DataBase Connected");
130  }
131 
132  // Setup character set we wish to use
133  if (mysql_set_character_set(mysql, "utf8") == 0)
134  sLog.Cyan(" DataBase Manager", "DataBase Character set: %s", mysql_character_set_name(mysql));
135 }
int16 pPort
Definition: dbcore.h:191
std::string pHost
Definition: dbcore.h:193
std::string pUser
Definition: dbcore.h:194
signed __int32 int32
Definition: eve-compat.h:49
void SetError(uint err, const char *str)
Definition: dbcore.cpp:420
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
std::string pPassword
Definition: dbcore.h:195
const char * c_str() const
Definition: dbcore.h:48
bool pCompress
Definition: dbcore.h:185
#define snprintf
Definition: eve-compat.h:184
bool pReconnect
Definition: dbcore.h:187
std::string pDatabase
Definition: dbcore.h:196
bool pSocket
Definition: dbcore.h:188
bool pSSL
Definition: dbcore.h:189
eStatus pStatus
Definition: dbcore.h:183
MYSQL * mysql
Definition: dbcore.h:181
Definition: dbcore.h:39

Here is the call graph for this function:

Here is the caller graph for this function:

int32 DBcore::DoEscapeString ( char *  tobuf,
const char *  frombuf,
int32  fromlen 
)

Definition at line 358 of file dbcore.cpp.

References mysql.

359 {
360  return mysql_real_escape_string(mysql, tobuf, frombuf, fromlen);
361 }
MYSQL * mysql
Definition: dbcore.h:181
void DBcore::DoEscapeString ( std::string &  to,
const std::string &  from 
)

Definition at line 363 of file dbcore.cpp.

References mysql.

364 {
365  assert(mysql);
366  uint32 len = (uint32)from.length();
367  to.resize(len * 2); // make enough room
368  uint32 esc_len = mysql_real_escape_string(mysql, &to[0], from.c_str(), len);
369  to.resize(esc_len + 1); // optional.
370 }
unsigned __int32 uint32
Definition: eve-compat.h:50
MYSQL * mysql
Definition: dbcore.h:181
bool DBcore::DoQuery_locked ( DBerror err,
const char *  query,
int  querylen,
bool  retry = true 
)
private

Definition at line 308 of file dbcore.cpp.

References _log, DBerror::c_str(), DBerror::ClearError(), codelog, Connected, Error, DBerror::GetErrNo(), GetTimeUSeconds(), is_log_enabled, mysql, pProfile, pStatus, Reconnect(), DBerror::SetError(), and sProfiler.

Referenced by RunQuery(), and RunQueryLID().

309 {
310  double profileStartTime = GetTimeUSeconds();
311 
312  if (mysql == nullptr) {
313  pStatus = Error;
314  codelog(DATABASE__ERROR, "DBCore - mysql = null");
315  if (!Reconnect())
316  return false;
317  }
318 
319  if (pStatus != Connected) {
320  codelog(DATABASE__ERROR, "DBCore - Status != Connected");
321  _log(DATABASE__MESSAGE, "DBCore error detected. Look for error msgs in logs prior to this point.");
322  if (!Reconnect())
323  return false;
324  }
325 
326  if (is_log_enabled(DATABASE__QUERIES))
327  _log(DATABASE__QUERIES, "DBcore Query - %s", query);
328 
329  if (mysql_real_query(mysql, query, querylen)) {
330  uint num = mysql_errno(mysql);
331  if (num > 0)
332  pStatus = Error;
333 
334  // there are many correctable errors to check for
335  if ((num == CR_SERVER_LOST) or (num == CR_SERVER_GONE_ERROR)) {
336  _log(DATABASE__ERROR, "DBCore error - server lost or gone.");
337  if (!Reconnect())
338  return false;
339  }
340 
341  if ((pStatus == Connected) and retry)
342  return DoQuery_locked(err, query, querylen, retry);
343 
344  err.SetError(num, mysql_error(mysql));
345  codelog(DATABASE__ERROR, "DBCore Query - #%u in '%s': %s", err.GetErrNo(), query, err.c_str());
346  return false;
347  }
348 
349  err.ClearError();
350 
351  if (pProfile)
352  sProfiler.AddTime(9, GetTimeUSeconds() - profileStartTime);
353 
354  return true;
355 }
#define _log(type, fmt,...)
Definition: logsys.h:124
void ClearError()
Definition: dbcore.cpp:426
#define sProfiler
Definition: dbcore.cpp:39
bool DoQuery_locked(DBerror &err, const char *query, int querylen, bool retry=true)
Definition: dbcore.cpp:308
void SetError(uint err, const char *str)
Definition: dbcore.cpp:420
#define is_log_enabled(type)
Definition: logsys.h:78
double GetTimeUSeconds()
Definition: utils_time.cpp:116
const char * c_str() const
Definition: dbcore.h:48
#define codelog(type, fmt,...)
Definition: logsys.h:128
bool Reconnect()
Definition: dbcore.cpp:137
uint32 GetErrNo() const
Definition: dbcore.h:45
eStatus pStatus
Definition: dbcore.h:183
bool pProfile
Definition: dbcore.h:186
MYSQL * mysql
Definition: dbcore.h:181

Here is the call graph for this function:

Here is the caller graph for this function:

MYSQL* DBcore::getMySQL ( )
inlineprotected

Definition at line 170 of file dbcore.h.

References mysql.

170 { return mysql; }
MYSQL * mysql
Definition: dbcore.h:181
eStatus DBcore::GetStatus ( ) const
inline

Definition at line 167 of file dbcore.h.

References pStatus.

167 { return pStatus; }
eStatus pStatus
Definition: dbcore.h:183
void DBcore::Initialize ( std::string  host,
std::string  user,
std::string  password,
std::string  database,
bool  compress = false,
bool  SSL = false,
int16  port = 3306,
bool  socket = false,
bool  reconnect = false,
bool  profile = false 
)

Definition at line 154 of file dbcore.cpp.

References Connect(), Connected, MDatabase, mysql, pCompress, pDatabase, pHost, pPassword, pPort, pProfile, pReconnect, pSocket, pSSL, pStatus, pUser, and sLog.

156 {
157  if (mysql == nullptr)
158  mysql = mysql_init(nullptr); // try again
159  if (mysql == nullptr) {
160  sLog.Error( " ServerInit", "Unable to connect to the database: mysql_init returned null");
161  return;
162  }
163  if (pStatus == Connected)
164  return;
165 
166  pHost = host;
167  pUser = user;
168  pPassword = password;
169  pDatabase = database;
170  pPort = port;
171  pSSL = SSL;
172  pCompress = compress;
173  pSocket = socket;
174  pReconnect = reconnect;
175  pProfile = profile;
176 
177  if (pHost.empty() or pUser.empty() or pPassword.empty() or pDatabase.empty()) {
178  sLog.Error( " ServerInit", "Unable to connect to the database: required connect field(s) are empty.");
179  return;
180  }
181 
182  uint errnum = 0;
183  char errbuf[1024];
184  errbuf[0] = 0;
185 
186  MutexLock lock(MDatabase);
187 
188  Connect(&errnum, errbuf);
189  sLog.Blue(" DataBase Manager", "DataBase Manager Initialized");
190 }
int16 pPort
Definition: dbcore.h:191
A lock for a Lockable object.
Definition: Lock.h:70
std::string pHost
Definition: dbcore.h:193
std::string pUser
Definition: dbcore.h:194
Mutex MDatabase
Definition: dbcore.h:182
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
std::string pPassword
Definition: dbcore.h:195
bool pCompress
Definition: dbcore.h:185
bool pReconnect
Definition: dbcore.h:187
std::string pDatabase
Definition: dbcore.h:196
bool pSocket
Definition: dbcore.h:188
bool pSSL
Definition: dbcore.h:189
eStatus pStatus
Definition: dbcore.h:183
void Connect(uint *errnum=0, char *errbuf=0)
Definition: dbcore.cpp:60
bool pProfile
Definition: dbcore.h:186
MYSQL * mysql
Definition: dbcore.h:181

Here is the call graph for this function:

bool DBcore::IsSafeString ( const char *  str)
static

Definition at line 373 of file dbcore.cpp.

373  {
374  for(; *str != '\0'; str++) {
375  switch(*str) {
376  case '\'':
377  case '\\':
378  return false;
379  }
380  }
381  return true;
382 }
bool DBcore::IsSafeString ( std::string &  s)
static

Definition at line 384 of file dbcore.cpp.

384  {
385  for (uint i = 0; i < s.length(); ++i) {
386  switch (s[i]) {
387  case '\'':
388  case '\\':
389  return false;
390  }
391  }
392  return true;
393 }
void DBcore::ping ( )

Definition at line 212 of file dbcore.cpp.

References MDatabase, mysql, Mutex::TryLock(), and Mutex::Unlock().

213 {
214  // well, if it's locked, someone's using it. If someone's using it, it doesn't need a ping
215  if ( MDatabase.TryLock() ) {
216  mysql_ping(mysql);
217  MDatabase.Unlock();
218  }
219 }
bool TryLock()
Attempts to lock the mutex.
Definition: Mutex.cpp:66
Mutex MDatabase
Definition: dbcore.h:182
void Unlock()
Unlocks the mutex.
Definition: Mutex.cpp:75
MYSQL * mysql
Definition: dbcore.h:181

Here is the call graph for this function:

bool DBcore::Reconnect ( )
protected

Definition at line 137 of file dbcore.cpp.

References _log, Close(), Connect(), Connected, MDatabase, mysql, and pStatus.

Referenced by DoQuery_locked().

138 {
139  _log(DATABASE__MESSAGE, "DBCore attempting to recover...");
140  Close();
141  mysql = mysql_init(nullptr);
142  uint errnum = 0;
143  char errbuf[1024];
144  errbuf[0] = 0;
145  MutexLock lock(MDatabase);
146  Connect(&errnum, errbuf);
147 
148  if (pStatus == Connected)
149  _log(DATABASE__MESSAGE, "DBCore recovery successful. Continuing.");
150 
151  return pStatus;
152 }
#define _log(type, fmt,...)
Definition: logsys.h:124
A lock for a Lockable object.
Definition: Lock.h:70
Mutex MDatabase
Definition: dbcore.h:182
void Close()
Definition: dbcore.cpp:192
eStatus pStatus
Definition: dbcore.h:183
void Connect(uint *errnum=0, char *errbuf=0)
Definition: dbcore.cpp:60
MYSQL * mysql
Definition: dbcore.h:181

Here is the call graph for this function:

Here is the caller graph for this function:

bool DBcore::RunQuery ( DBQueryResult into,
const char *  query_fmt,
  ... 
)

Definition at line 222 of file dbcore.cpp.

References codelog, DoQuery_locked(), DBQueryResult::error, MDatabase, mysql, DBerror::SetError(), DBQueryResult::SetResult(), EvE::traceStack(), and vsnprintf.

222  {
223  MutexLock lock(MDatabase);
224 
225  char query[4096];
226  va_list vlist;
227  va_start(vlist, query_fmt);
228  int querylen = std::vsnprintf(query, 4096, query_fmt, vlist);
229  va_end(vlist);
230 
231  if (!DoQuery_locked(into.error, query, querylen))
232  return false;
233 
234  uint col_count = mysql_field_count(mysql);
235  if (col_count == 0) {
236  into.error.SetError(0xFFFF, "DBcore::RunQuery: No Result");
237  codelog(DATABASE__ERROR, "DBCore::RunQuery: %s failed because it did not return a result", query);
238  EvE::traceStack();
239  return false;
240  }
241 
242  into.SetResult(mysql_store_result(mysql), col_count);
243 
244  return true;
245 }
#define vsnprintf
Definition: eve-compat.h:188
A lock for a Lockable object.
Definition: Lock.h:70
bool DoQuery_locked(DBerror &err, const char *query, int querylen, bool retry=true)
Definition: dbcore.cpp:308
void SetError(uint err, const char *str)
Definition: dbcore.cpp:420
Mutex MDatabase
Definition: dbcore.h:182
#define codelog(type, fmt,...)
Definition: logsys.h:128
void SetResult(MYSQL_RES *res, uint32 colCount)
Definition: dbcore.cpp:538
DBerror error
Definition: dbcore.h:69
void traceStack(void)
Definition: misc.cpp:169
MYSQL * mysql
Definition: dbcore.h:181

Here is the call graph for this function:

bool DBcore::RunQuery ( DBerror err,
const char *  query_fmt,
  ... 
)

Definition at line 248 of file dbcore.cpp.

References args, DoQuery_locked(), MDatabase, and vasprintf().

248  {
249  MutexLock lock(MDatabase);
250 
251  va_list args;
252  va_start(args, query_fmt);
253  char* query(nullptr);
254  int querylen = vasprintf(&query, query_fmt, args);
255  va_end(args);
256 
257  if (!DoQuery_locked(err, query, querylen)) {
258  free(query);
259  return false;
260  }
261 
262  free(query);
263  return true;
264 }
A lock for a Lockable object.
Definition: Lock.h:70
bool DoQuery_locked(DBerror &err, const char *query, int querylen, bool retry=true)
Definition: dbcore.cpp:308
* args
Mutex MDatabase
Definition: dbcore.h:182
int vasprintf(char **strp, const char *fmt, va_list ap)
Definition: eve-compat.cpp:70

Here is the call graph for this function:

bool DBcore::RunQuery ( DBerror err,
uint32 affected_rows,
const char *  query_fmt,
  ... 
)

Definition at line 267 of file dbcore.cpp.

References args, DoQuery_locked(), MDatabase, mysql, and vasprintf().

267  {
268  MutexLock lock(MDatabase);
269 
270  va_list args;
271  va_start(args, query_fmt);
272  char* query(nullptr);
273  int querylen = vasprintf(&query, query_fmt, args);
274  va_end(args);
275 
276  if (!DoQuery_locked(err, query, querylen)) {
277  free(query);
278  return false;
279  }
280  free(query);
281 
282  affected_rows = (uint32)mysql_affected_rows(mysql);
283 
284  return true;
285 }
A lock for a Lockable object.
Definition: Lock.h:70
bool DoQuery_locked(DBerror &err, const char *query, int querylen, bool retry=true)
Definition: dbcore.cpp:308
* args
Mutex MDatabase
Definition: dbcore.h:182
int vasprintf(char **strp, const char *fmt, va_list ap)
Definition: eve-compat.cpp:70
unsigned __int32 uint32
Definition: eve-compat.h:50
MYSQL * mysql
Definition: dbcore.h:181

Here is the call graph for this function:

bool DBcore::RunQueryLID ( DBerror err,
uint32 last_insert_id,
const char *  query_fmt,
  ... 
)

Definition at line 288 of file dbcore.cpp.

References args, DoQuery_locked(), MDatabase, mysql, and vasprintf().

288  {
289  MutexLock lock(MDatabase);
290 
291  va_list args;
292  va_start(args, query_fmt);
293  char* query(nullptr);
294  int querylen = vasprintf(&query, query_fmt, args);
295  va_end(args);
296 
297  if (!DoQuery_locked(err, query, querylen)) {
298  free(query);
299  return false;
300  }
301  free(query);
302 
303  last_insert_id = (uint32)mysql_insert_id(mysql);
304 
305  return true;
306 }
A lock for a Lockable object.
Definition: Lock.h:70
bool DoQuery_locked(DBerror &err, const char *query, int querylen, bool retry=true)
Definition: dbcore.cpp:308
* args
Mutex MDatabase
Definition: dbcore.h:182
int vasprintf(char **strp, const char *fmt, va_list ap)
Definition: eve-compat.cpp:70
unsigned __int32 uint32
Definition: eve-compat.h:50
MYSQL * mysql
Definition: dbcore.h:181

Here is the call graph for this function:

Member Data Documentation

Mutex DBcore::MDatabase
private

Definition at line 182 of file dbcore.h.

Referenced by Initialize(), ping(), Reconnect(), RunQuery(), and RunQueryLID().

MYSQL* DBcore::mysql
private
bool DBcore::pCompress
private

Definition at line 185 of file dbcore.h.

Referenced by Connect(), and Initialize().

std::string DBcore::pDatabase
private

Definition at line 196 of file dbcore.h.

Referenced by Connect(), and Initialize().

std::string DBcore::pHost
private

Definition at line 193 of file dbcore.h.

Referenced by Connect(), and Initialize().

std::string DBcore::pPassword
private

Definition at line 195 of file dbcore.h.

Referenced by Connect(), and Initialize().

int16 DBcore::pPort
private

Definition at line 191 of file dbcore.h.

Referenced by Connect(), and Initialize().

bool DBcore::pProfile
private

Definition at line 186 of file dbcore.h.

Referenced by DoQuery_locked(), and Initialize().

bool DBcore::pReconnect
private

Definition at line 187 of file dbcore.h.

Referenced by Connect(), and Initialize().

bool DBcore::pSocket
private

Definition at line 188 of file dbcore.h.

Referenced by Connect(), and Initialize().

bool DBcore::pSSL
private

Definition at line 189 of file dbcore.h.

Referenced by Connect(), and Initialize().

eStatus DBcore::pStatus
private

Definition at line 183 of file dbcore.h.

Referenced by Close(), Connect(), DoQuery_locked(), GetStatus(), Initialize(), and Reconnect().

std::string DBcore::pUser
private

Definition at line 194 of file dbcore.h.

Referenced by Connect(), and Initialize().


The documentation for this class was generated from the following files: