112 lines
4.3 KiB
C++
112 lines
4.3 KiB
C++
//========= 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
|