//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef MYSQL_WRAPPER_H #define MYSQL_WRAPPER_H #ifdef _WIN32 #pragma once #endif #include "interface.h" #include "utlvector.h" class IMySQLRowSet; class CColumnValue { public: CColumnValue(IMySQLRowSet *pSQL, int iColumn); const char *String(); long Int32(); private: IMySQLRowSet *m_pSQL; int m_iColumn; }; class IMySQLRowSet { public: virtual void Release() = 0; // Get the number of columns in the data returned from the last query (if it // was a select statement). virtual int NumFields() = 0; // Get the name of each column returned by the last query. virtual const char *GetFieldName(int iColumn) = 0; // Call this in a loop until it returns false to iterate over all rows the // query returned. virtual bool NextRow() = 0; // You can call this to start iterating over the result set from the start // again. Note: after calling this, you have to call NextRow() to actually // get the first row's value ready. virtual bool SeekToFirstRow() = 0; virtual CColumnValue GetColumnValue(int iColumn) = 0; virtual CColumnValue GetColumnValue(const char *pColumnName) = 0; virtual const char *GetColumnValue_String(int iColumn) = 0; virtual long GetColumnValue_Int(int iColumn) = 0; // You can call this to get the index of a column for faster lookups with // GetColumnValue( int ). Returns -1 if the column can't be found. virtual int GetColumnIndex(const char *pColumnName) = 0; }; class IMySQL : public IMySQLRowSet { public: virtual bool InitMySQL(const char *pDBName, const char *pHostName = "", const char *pUserName = "", const char *pPassword = "") = 0; virtual void Release() = 0; // These execute SQL commands. They return 0 if the query was successful. virtual int Execute(const char *pString) = 0; // This reads in all of the data in the last row set you queried with // Execute and builds a separate copy. This is useful in some of the VMPI // tools to have a thread repeatedly execute a slow query, then store off // the results for the main thread to parse. virtual IMySQLRowSet *DuplicateRowSet() = 0; // If you just inserted rows into a table with an AUTO_INCREMENT column, // then this returns the (unique) value of that column. virtual unsigned long InsertID() = 0; // Returns the last error message, if an error took place virtual const char *GetLastError() = 0; }; #define MYSQL_WRAPPER_VERSION_NAME "MySQLWrapper001" // ------------------------------------------------------------------------------------------------ // // Inlines. // ------------------------------------------------------------------------------------------------ // // inline CColumnValue::CColumnValue(IMySQLRowSet *pSQL, int iColumn) { m_pSQL = pSQL; m_iColumn = iColumn; } inline const char *CColumnValue::String() { return m_pSQL->GetColumnValue_String(m_iColumn); } inline long CColumnValue::Int32() { return m_pSQL->GetColumnValue_Int(m_iColumn); } #endif // MYSQL_WRAPPER_H