2013-12-03 07:31:46 +04:00
//========= 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