From 3bf9df6b2785fa6d951086978a3e66f49427166a Mon Sep 17 00:00:00 2001 From: FluorescentCIAAfricanAmerican <0934gj3049fk@protonmail.com> Date: Wed, 22 Apr 2020 12:56:21 -0400 Subject: 1 --- utils/sqlwrapper/sqlhelpers.h | 162 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 utils/sqlwrapper/sqlhelpers.h (limited to 'utils/sqlwrapper/sqlhelpers.h') diff --git a/utils/sqlwrapper/sqlhelpers.h b/utils/sqlwrapper/sqlhelpers.h new file mode 100644 index 0000000..b2c53f6 --- /dev/null +++ b/utils/sqlwrapper/sqlhelpers.h @@ -0,0 +1,162 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= +#include "utlvector.h" + +extern "C" +{ + #include + #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 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 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 m_VecSQLRowData; + CUtlVector 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; +}; + -- cgit v1.2.3