/** * Disconnects the connection and unlinks the logger */ MySQLHandler::~MySQLHandler () { if (connection != NULL) { mysqlDisconnect (); } logger = NULL; }
void mysql_murder(nsp_state *N, obj_t *cobj) { #define __FN__ __FILE__ ":mysql_murder()" MYSQL_CONN *conn; n_warn(N, __FN__, "reaper is claiming another lost soul"); if ((cobj->val->type != NT_CDATA) || (cobj->val->d.str == NULL) || (nc_strcmp(cobj->val->d.str, "mysql-conn") != 0)) n_error(N, NE_SYNTAX, __FN__, "expected a mysql conn"); conn = (MYSQL_CONN *)cobj->val->d.str; mysqlDisconnect(N, conn); n_free(N, (void *)&cobj->val->d.str, sizeof(MYSQL_CONN) + 1); cobj->val->size = 0; return; #undef __FN__ }
/** * Perform a query (returns a result set) */ MYSQL_RES* MySQLHandler::mysqlQuery (const char *format, ...) { lock (query_mutex); // Check to make sure we have a connection and then perform the query if (connection) { // Builds the query va_list args; va_start (args, format); char query[512]; memset (query, 0, strlen (query)); vsnprintf (query, 512, format, args); MYSQL_RES* temp_result_set; logger->debugf (DEBUG_DETAILED, " MYSQL DEBUG 3: mysqlQuery called with, %s.\n", query); lock (mysql_mutex); if (mysql_query (connection, query)) { logger->debugf (DEBUG_MINIMAL, " MYSQL DEBUG 1: Query failed, %s.\n", mysql_error (connection)); // If the server has disconnected, reconnect and try again if ((mysql_errno (connection) == CR_SERVER_GONE_ERROR) || (mysql_errno (connection) == CR_SERVER_LOST)) { release (mysql_mutex); mysqlDisconnect (); mysqlConnect (); lock (mysql_mutex); if (mysql_query (connection, query)) { logger->debugf (DEBUG_MINIMAL, " MYSQL DEBUG 1: Query failed again after reconnect, %s.\n", mysql_error (connection)); va_end(args); release (mysql_mutex); release (query_mutex); return NULL; } } else { va_end(args); release (mysql_mutex); release (query_mutex); return NULL; } } temp_result_set = mysql_store_result (connection); va_end(args); release (mysql_mutex); release (query_mutex); return temp_result_set; } else { release (query_mutex); logger->log (" MYSQL: Failed to perform the query because there was no connection.\n"); return NULL; } }