2006-04-24 11:19:15 +04:00
|
|
|
#include <string.h>
|
2006-04-23 05:10:06 +04:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include "MysqlResultSet.h"
|
|
|
|
|
|
|
|
using namespace SourceMod;
|
|
|
|
|
|
|
|
MysqlResultRow::MysqlResultRow() :
|
2006-08-18 23:08:51 +04:00
|
|
|
m_CurRow(NULL), m_Columns(0)
|
2006-04-23 05:10:06 +04:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *MysqlResultRow::GetRaw(unsigned int columnId, size_t *length)
|
|
|
|
{
|
|
|
|
if (columnId >= m_Columns)
|
|
|
|
{
|
|
|
|
if (length)
|
|
|
|
*length = 0;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
*length = static_cast<size_t>(m_Lengths[columnId]);
|
|
|
|
return m_CurRow[columnId];
|
|
|
|
}
|
|
|
|
|
|
|
|
bool MysqlResultRow::IsNull(unsigned int columnId)
|
|
|
|
{
|
|
|
|
if (columnId >= m_Columns)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return (m_CurRow[columnId] == NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *MysqlResultRow::GetStringSafe(unsigned int columnId)
|
|
|
|
{
|
|
|
|
if (columnId >= m_Columns)
|
|
|
|
return "";
|
|
|
|
|
|
|
|
return (m_CurRow[columnId] ? m_CurRow[columnId] : "");
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *MysqlResultRow::GetString(unsigned int columnId)
|
|
|
|
{
|
|
|
|
if (columnId >= m_Columns)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
return m_CurRow[columnId];
|
|
|
|
}
|
|
|
|
|
|
|
|
double MysqlResultRow::GetDouble(unsigned int columnId)
|
|
|
|
{
|
|
|
|
return atof(GetStringSafe(columnId));
|
|
|
|
}
|
|
|
|
|
|
|
|
float MysqlResultRow::GetFloat(unsigned int columnId)
|
|
|
|
{
|
|
|
|
return (float)atof(GetStringSafe(columnId));
|
|
|
|
}
|
|
|
|
|
|
|
|
int MysqlResultRow::GetInt(unsigned int columnId)
|
|
|
|
{
|
|
|
|
return atoi(GetStringSafe(columnId));
|
|
|
|
}
|
|
|
|
|
2007-10-23 01:31:02 +04:00
|
|
|
MysqlResultSet::MysqlResultSet(MYSQL_RES *res, MYSQL *mysql) :
|
2006-04-23 05:10:06 +04:00
|
|
|
m_pRes(res)
|
|
|
|
{
|
|
|
|
m_Rows = (unsigned int)mysql_num_rows(res);
|
|
|
|
m_Columns = (unsigned int)mysql_num_fields(res);
|
2007-10-23 01:31:02 +04:00
|
|
|
m_pMySQL = mysql;
|
2006-04-23 05:10:06 +04:00
|
|
|
|
|
|
|
if (m_Rows > 0)
|
|
|
|
{
|
|
|
|
NextRow();
|
|
|
|
}
|
|
|
|
|
|
|
|
m_kRow.m_Columns = m_Columns;
|
|
|
|
}
|
|
|
|
|
|
|
|
MysqlResultSet::~MysqlResultSet()
|
|
|
|
{
|
2007-10-23 01:31:02 +04:00
|
|
|
if (m_pRes == NULL)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
mysql_free_result(m_pRes);
|
|
|
|
while (mysql_next_result(m_pMySQL) == 0)
|
|
|
|
{
|
|
|
|
m_pRes = mysql_store_result(m_pMySQL);
|
|
|
|
if (m_pRes != NULL)
|
|
|
|
{
|
|
|
|
mysql_free_result(m_pRes);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool MysqlResultSet::NextResultSet()
|
|
|
|
{
|
|
|
|
if (!mysql_more_results(m_pMySQL))
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2006-04-23 05:10:06 +04:00
|
|
|
mysql_free_result(m_pRes);
|
2007-10-23 01:31:02 +04:00
|
|
|
if (mysql_next_result(m_pMySQL) != 0
|
|
|
|
|| (m_pRes = mysql_store_result(m_pMySQL)) == NULL)
|
|
|
|
{
|
|
|
|
m_Rows = 0;
|
|
|
|
m_pRes = NULL;
|
|
|
|
m_Columns = 0;
|
|
|
|
m_kRow.m_CurRow = NULL;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_Rows = (unsigned int)mysql_num_rows(m_pRes);
|
|
|
|
m_Columns = (unsigned int)mysql_num_fields(m_pRes);
|
|
|
|
|
|
|
|
if (m_Rows > 0)
|
|
|
|
{
|
|
|
|
NextRow();
|
|
|
|
}
|
|
|
|
|
|
|
|
m_kRow.m_Columns = m_Columns;
|
2007-10-23 15:24:51 +04:00
|
|
|
|
|
|
|
return true;
|
2006-04-23 05:10:06 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void MysqlResultSet::FreeHandle()
|
|
|
|
{
|
|
|
|
delete this;
|
|
|
|
}
|
|
|
|
|
|
|
|
IResultRow *MysqlResultSet::GetRow()
|
|
|
|
{
|
|
|
|
return static_cast<IResultRow *>(&m_kRow);
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned int MysqlResultSet::RowCount()
|
|
|
|
{
|
|
|
|
return m_Rows;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *MysqlResultSet::FieldNumToName(unsigned int num)
|
|
|
|
{
|
|
|
|
if (num >= m_Columns)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
MYSQL_FIELD *field = mysql_fetch_field_direct(m_pRes, num);
|
|
|
|
if (!field || !field->name)
|
|
|
|
return "";
|
|
|
|
|
|
|
|
return field->name;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool MysqlResultSet::FieldNameToNum(const char *name, unsigned int *columnId)
|
|
|
|
{
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
for (unsigned int i=0; i<m_Columns; i++)
|
|
|
|
{
|
|
|
|
field = mysql_fetch_field_direct(m_pRes, i);
|
|
|
|
if (!field || !field->name)
|
|
|
|
continue;
|
|
|
|
if (strcmp(name, field->name) == 0)
|
|
|
|
{
|
|
|
|
if (columnId)
|
|
|
|
*columnId = i;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned int MysqlResultSet::FieldCount()
|
|
|
|
{
|
|
|
|
return m_Columns;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool MysqlResultSet::IsDone()
|
|
|
|
{
|
|
|
|
return (m_kRow.m_CurRow == NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MysqlResultSet::NextRow()
|
|
|
|
{
|
|
|
|
MYSQL_ROW row = mysql_fetch_row(m_pRes);
|
|
|
|
m_kRow.m_CurRow = row;
|
|
|
|
|
|
|
|
if (row)
|
|
|
|
{
|
|
|
|
unsigned long *lengths = mysql_fetch_lengths(m_pRes);
|
|
|
|
m_kRow.m_Lengths = lengths;
|
|
|
|
}
|
|
|
|
}
|
2007-04-24 19:46:33 +04:00
|
|
|
|
|
|
|
void MysqlResultSet::Rewind()
|
|
|
|
{
|
|
|
|
mysql_data_seek(m_pRes, 0);
|
|
|
|
NextRow();
|
|
|
|
}
|