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.
116 lines
4.1 KiB
116 lines
4.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Sql wrapper, encapsulates basic SQL functionality |
|
// |
|
// $NoKeywords: $ |
|
//============================================================================= |
|
#ifndef ISQLWRAPPER_H |
|
#define ISQLWRAPPER_H |
|
|
|
#include "tier0/platform.h" |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
// SQL column types |
|
enum EColumnType |
|
{ |
|
SQL_NONE = 0, |
|
SQL_INT, |
|
SQL_STRING, |
|
SQL_FLOAT, |
|
SQL_TIME, |
|
SQL_UINT64 |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// encapsulates a table's description |
|
//----------------------------------------------------------------------------- |
|
class ISQLTable |
|
{ |
|
public: |
|
virtual int GetCSQLColumn() const = 0; |
|
virtual const char *PchColumnName( int iSQLColumn ) const = 0; |
|
virtual EColumnType GetEColumnType( int iSQLColumn ) const = 0; |
|
virtual const char *PchName() const = 0; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// encapsulates a database worth of tables |
|
//----------------------------------------------------------------------------- |
|
class ISQLTableSet |
|
{ |
|
public: |
|
virtual int GetCSQLTable() const = 0; |
|
virtual const ISQLTable *PSQLTable( int iSQLTable ) const = 0; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// encapsulates a single returned row from a valid SQL query |
|
//----------------------------------------------------------------------------- |
|
class ISQLRow |
|
{ |
|
public: |
|
virtual int GetCSQLRowData() const = 0; |
|
virtual const char *PchData( int iSQLColumn ) const = 0; |
|
virtual int NData( int iSQLColumn ) const = 0; |
|
virtual uint64 UlData( int iSQLColumn ) const = 0; |
|
virtual float FlData( int iSQLColumn ) const = 0; |
|
virtual uint64 UlTime( int iSQLColumn ) const = 0; |
|
virtual bool BData( int iSQLColumn ) const = 0; |
|
virtual EColumnType GetEColumnType( int iSQLColumn ) const = 0; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// encapsulates a result set, which is made up of a series of rows |
|
// You need to call PNextResult() NRow() times to get all the results |
|
// (there is no random access to the result set). |
|
//----------------------------------------------------------------------------- |
|
class IResultSet |
|
{ |
|
public: |
|
virtual int GetCSQLRow() const = 0; |
|
virtual const ISQLRow *PSQLRowNextResult() = 0; // note, not const on the class because it makes a new row object |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// This interface encapsulates a database connection and lets you operate on it. |
|
// Use the ISQLWrapperFactory factory to get access to the interface. |
|
// NOTE - you can only have one outstanding query at a time. When you are done with a query call FreeResult() |
|
//----------------------------------------------------------------------------- |
|
class ISQLWrapper |
|
{ |
|
public: |
|
// run a SQL statement against the DB, typically an insert statement as no data is returned |
|
virtual bool BInsert( const char *pchQueryString ) = 0; |
|
// get a description of the tables associated with the db you connected to |
|
virtual const ISQLTableSet *PSQLTableSetDescription() = 0; |
|
// run a query against the db and then iterate the result set (you can only have 1 outstanding query at a time, and call FreeResults() when you are done) |
|
virtual IResultSet *PResultSetQuery( const char *pchQueryString ) = 0; |
|
// you MUST call then after you finish with the IResultSet from the above query |
|
virtual void FreeResult() = 0; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// This is a factory to create objects that let you interact with a MySQL database. |
|
// Make sure you Free() any interfaces you create. |
|
//----------------------------------------------------------------------------- |
|
class ISQLWrapperFactory |
|
{ |
|
public: |
|
// setup details about this db connection |
|
virtual ISQLWrapper *Create( const char *pchDB, const char *pchHost, const char *pchUsername, const char *pchPassword ) = 0; |
|
virtual void Free( ISQLWrapper *pSQLWrapper ) = 0; |
|
}; |
|
|
|
#define INTERFACEVERSION_ISQLWRAPPER "ISQLWRAPPER001" |
|
|
|
#endif // ISQLWRAPPER_H |
|
|
|
|