* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ * InspIRCd is copyright (C) 2002-2004 ChatSpike-Dev.
* E-mail:
* <brain@chatspike.net>
* <Craig@chatspike.net>
#include "m_sql.h"
/* $ModDesc: SQL Service Provider module for all other m_sql* modules */
-/* $CompileFlags: -I/usr/local/include/mysql -I/usr/include/mysql -I/usr/local/include -I/usr/include */
-/* $LinkerFlags: -L/usr/local/lib/mysql -Wl,--rpath -Wl,/usr/local/lib/mysql -L/usr/lib/mysql -Wl,--rpath -Wl,/usr/lib/mysql -lmysqlclient */
+/* $CompileFlags: `mysql_config --include` */
+/* $LinkerFlags: `mysql_config --libs` `perl ../mysql_rpath.pl` */
/** SQLConnection represents one mysql session.
* Each session has its own persistent connection to the database.
#define mysql_field_count mysql_num_fields
#endif
-class SQLConnection
+class SQLConnection : public classbase
{
protected:
this->pass = thispass;
this->db = thisdb;
this->id = myid;
- unsigned int timeout = 1;
- mysql_init(&connection);
- mysql_options(&connection,MYSQL_OPT_CONNECT_TIMEOUT,(char*)&timeout);
}
// This method connects to the database using the credentials supplied to the constructor, and returns
// true upon success.
bool Connect()
{
+ unsigned int timeout = 1;
+ mysql_init(&connection);
+ mysql_options(&connection,MYSQL_OPT_CONNECT_TIMEOUT,(char*)&timeout);
return mysql_real_connect(&connection, host.c_str(), user.c_str(), pass.c_str(), db.c_str(), 0, NULL, 0);
}
// multiple rows.
bool QueryResult(std::string query)
{
+ if (!CheckConnection()) return false;
+
int r = mysql_query(&connection, query.c_str());
if (!r)
{
// This method issues a query that just expects a number of 'effected' rows (e.g. UPDATE or DELETE FROM).
// the number of effected rows is returned in the return value.
- unsigned long QueryCount(std::string query)
+ long QueryCount(std::string query)
{
- int r = mysql_query(&connection, query.c_str());
- if (!r)
- {
- res = mysql_store_result(&connection);
- unsigned long rows = mysql_affected_rows(&connection);
- mysql_free_result(res);
- return rows;
- }
- return 0;
+ /* If the connection is down, we return a negative value - New to 1.1 */
+ if (!CheckConnection()) return -1;
+
+ int r = mysql_query(&connection, query.c_str());
+ if (!r)
+ {
+ res = mysql_store_result(&connection);
+ unsigned long rows = mysql_affected_rows(&connection);
+ mysql_free_result(res);
+ return rows;
+ }
+ return 0;
}
// This method fetches a row, if available from the database. You must issue a query
if (res)
{
mysql_free_result(res);
+ res = NULL;
return true;
}
else return false;
}
+ bool ConnectionLost()
+ {
+ if (&connection) {
+ return (mysql_ping(&connection) != 0);
+ }
+ else return false;
+ }
+
+ bool CheckConnection()
+ {
+ if (ConnectionLost()) {
+ return Connect();
+ }
+ else return true;
+ }
+
std::string GetError()
{
return mysql_error(&connection);
virtual ~ModuleSQL()
{
Connections.clear();
- delete Conf;
+ DELETE(Conf);
}
- virtual void OnRehash(std::string parameter)
+ virtual void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader();
LoadDatabases(Conf);
}