Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================
#include "utlvector.h"
extern "C" { #include <WinSock.H>
#include "mysql.h"
}; #include "utlvector.h"
typedef enum_field_types ESQLFieldType;
//-----------------------------------------------------------------------------
// Purpose: helper interface for running queries internal to this dll
//-----------------------------------------------------------------------------
class ISQLHelper { public: // run a sql query on the db
virtual bool BInternalQuery( const char *pchQueryString, MYSQL_RES **ppMySQLRes, bool bRecurse = true ) = 0; };
//-----------------------------------------------------------------------------
// Purpose: represents the data about a single SQL column
//-----------------------------------------------------------------------------
class CSQLColumn { public: CSQLColumn() { m_rgchName[0] = 0; } CSQLColumn( const char *pchName, ESQLFieldType eSQLFieldType ); virtual const char *PchColumnName() const { return m_rgchName; }; virtual EColumnType GetEColumnType() const { return m_EColumnType; }; virtual ESQLFieldType GetESQLFieldType() const { return m_ESQLFieldType; };
private: char m_rgchName[64]; EColumnType m_EColumnType; ESQLFieldType m_ESQLFieldType; };
//-----------------------------------------------------------------------------
// Purpose: encapsulates a table's description
//-----------------------------------------------------------------------------
class CSQLTable : public ISQLTable { public: CSQLTable( const char *pchName ); CSQLTable( CSQLTable const &CSQLTable ); // copy constructor
void AddColumn( const char *pchName, ESQLFieldType ESQLFieldType ); const char *PchName() const { return m_rgchName; }; virtual int GetCSQLColumn() const { return m_VecSQLColumn.Count(); }; virtual const char *PchColumnName( int iSQLColumn ) const { return m_VecSQLColumn[iSQLColumn].PchColumnName(); }; virtual EColumnType GetEColumnType( int iSQLColumn ) const { return m_VecSQLColumn[iSQLColumn].GetEColumnType(); }; virtual ESQLFieldType GetESQLFieldType( int iSQLColumn ) const { return m_VecSQLColumn[iSQLColumn].GetESQLFieldType(); };
void Reset() { m_VecSQLColumn.RemoveAll(); }
#ifdef DBGFLAG_VALIDATE
void Validate( CValidator &validator, char *pchName ); #endif
private: char m_rgchName[64]; CUtlVector<CSQLColumn> m_VecSQLColumn; };
//-----------------------------------------------------------------------------
// Purpose: encapsulates a db's worth of tables
//-----------------------------------------------------------------------------
class CSQLTableSet : public ISQLTableSet { public: CSQLTableSet() { m_bInit = false; } bool Init( ISQLHelper *pISQLHelper ); bool BInit() { return m_bInit; } virtual int GetCSQLTable() const { return m_VecSQLTable.Count(); }; virtual const ISQLTable *PSQLTable( int iSQLTable ) const; #ifdef DBGFLAG_VALIDATE
void Validate( CValidator &validator, char *pchName ); #endif
private: static EColumnType EColumnTypeFromPchName( const char *pchName ); CUtlVector<CSQLTable> m_VecSQLTable; bool m_bInit; };
//-----------------------------------------------------------------------------
// Purpose: describes a single row in a result set
//-----------------------------------------------------------------------------
class CSQLRow : public ISQLRow { public: CSQLRow( MYSQL_ROW *pMySQLRow, const ISQLTable *pSQLTableDescription, int cSQLRowData ); ~CSQLRow(); virtual int GetCSQLRowData() const { return m_VecSQLRowData.Count(); }; virtual const char *PchData( int iSQLRowData ) const; virtual int NData( int iSQLRowData ) const; virtual uint64 UlData( int iSQLRowData ) const; virtual float FlData( int iSQLRowData ) const; virtual uint64 UlTime( int iSQLRowData ) const; virtual bool BData( int iSQLRowData ) const; virtual EColumnType GetEColumnType( int iSQLRowData ) const;
#ifdef DBGFLAG_VALIDATE
void Validate( CValidator &validator, char *pchName ); #endif
private: struct SQLRowData_s { union { int nData; float flData; const char *pchData; uint64 ulTime; uint64 ulData; } data; EColumnType eColumnType; };
CUtlVector<struct SQLRowData_s> m_VecSQLRowData; CUtlVector<char *> m_VecPchStoredStrings; };
//-----------------------------------------------------------------------------
// Purpose: encapsulates a result set from a SQL query
//-----------------------------------------------------------------------------
class CResultSet : public IResultSet { public: CResultSet(); ~CResultSet(); bool Query( const char *pchQuery, ISQLHelper *pISQLHelper ); virtual int GetCSQLRow() const; virtual const ISQLRow *PSQLRowNextResult(); void FreeResult();
#ifdef DBGFLAG_VALIDATE
void Validate( CValidator &validator, char *pchName ); #endif
private: MYSQL_RES *m_MySQLRes; CSQLRow *m_pSQLRow; CSQLTable m_SQLTableDescription; int m_cSQLField; int m_cSQLRow; };
|