amxmodx/dlls/mysqlx/mysql/MysqlDriver.cpp

77 lines
1.5 KiB
C++
Raw Normal View History

2006-04-23 01:10:06 +00:00
#include <stdio.h>
#include <string.h>
#include "MysqlDriver.h"
#include "MysqlDatabase.h"
#if defined WIN32
#define snprintf _snprintf
#define strncasecmp strnicmp
#endif
using namespace SourceMod;
bool MysqlDriver::IsCompatDriver(const char *namestring)
{
return (strncasecmp(namestring, "mysql", 5) == 0);
}
const char *MysqlDriver::NameString()
{
return "mysql";
}
IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
{
return _Connect(info, errcode, error, maxlength, false);
}
IDatabase *MysqlDriver::Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
{
return _Connect(info, errcode, error, maxlength, true);
}
IDatabase *MysqlDriver::_Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength, bool do_timeout)
2006-04-23 01:10:06 +00:00
{
MYSQL *mysql = mysql_init(NULL);
if (!mysql)
{
if (errcode)
*errcode = -1;
if (error && maxlength)
{
snprintf(error, maxlength, "Initialization failed");
}
return false;
}
if (do_timeout && info->max_timeout)
{
mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&(info->max_timeout));
}
2006-04-23 01:10:06 +00:00
if (mysql_real_connect(mysql,
info->host,
info->user,
info->pass,
info->database,
info->port,
NULL,
0) == NULL)
{
if (errcode)
{
2006-04-23 01:10:06 +00:00
*errcode = mysql_errno(mysql);
}
2006-04-23 01:10:06 +00:00
if (error && maxlength)
{
2006-04-23 01:10:06 +00:00
snprintf(error, maxlength, "%s", mysql_error(mysql));
}
2006-04-23 01:10:06 +00:00
return false;
}
MysqlDatabase *pMysql = new MysqlDatabase(mysql, this);
return static_cast<IDatabase *>(pMysql);
}