bool DBcore::DoQuery_locked(DBerror &err, const char *query, int32 querylen, bool retry) { if (pStatus != Connected) Open_locked(); if (mysql_real_query(&mysql, query, querylen)) { int num = mysql_errno(&mysql); if (num == CR_SERVER_GONE_ERROR) pStatus = Error; if (retry && (num == CR_SERVER_LOST || num == CR_SERVER_GONE_ERROR)) { sLog.Error("DBCore", "Lost connection, attempting to recover...."); return DoQuery_locked(err, query, querylen, false); } pStatus = Error; err.SetError(num, mysql_error(&mysql)); sLog.Error("DBCore Query", "#%d in '%s': %s", err.GetErrNo(), query, err.c_str()); return false; } err.ClearError(); return true; }
bool DBcore::Open(DBerror &err, const char* iHost, const char* iUser, const char* iPassword, const char* iDatabase, int16 iPort, bool iCompress, bool iSSL) { MutexLock lock(MDatabase); pHost = iHost; pUser = iUser; pPassword = iPassword; pDatabase = iDatabase; pCompress = iCompress; pPort = iPort; pSSL = iSSL; int32 errnum; char errbuf[1024]; if(!Open_locked(&errnum, errbuf)) { err.SetError(errnum, errbuf); return false; } return true; }