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.
119 lines
3.7 KiB
119 lines
3.7 KiB
//====== Copyright ©, Valve Corporation, All rights reserved. =======
|
|
//
|
|
// Purpose: Base class for transactions that modify a CGCSharedObjectCache and the database
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef SHAREDOBJECTTRANSACTION_H
|
|
#define SHAREDOBJECTTRANSACTION_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
namespace GCSDK
|
|
{
|
|
|
|
class CSharedObjectTransaction
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* Constructor that will begin a transaction
|
|
* @param sqlAccess
|
|
* @param pName
|
|
*/
|
|
CSharedObjectTransaction( CSQLAccess &sqlAccess, const char *pName );
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
~CSharedObjectTransaction();
|
|
|
|
/**
|
|
* Adds an object that exists in the given CGCSharedObjectCache to be managed in this transaction.
|
|
* Call this before making any modifications to the object
|
|
* @param pSOCache the owner CGCSharedObjectCache
|
|
* @param pObject the object that will be modified
|
|
*/
|
|
bool AddManagedObject( CGCSharedObjectCache *pSOCache, CSharedObject *pObject );
|
|
|
|
/**
|
|
* Adds a brand new object to the given CGCSharedObjectCache
|
|
* @param pSOCache the owner CGCSharedObjectCache
|
|
* @param pObject the newly created object
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
bool BAddNewObject( CGCSharedObjectCache *pSOCache, CSharedObject *pObject, bool bAddToDatabase = true );
|
|
|
|
/**
|
|
* Removes an existing object from the CGCSharedObjectCache
|
|
* @param pSOCache the owner CGCSharedObjectCache
|
|
* @param pObject the object to be removed from the CGCSharedObjectCache
|
|
* @param bRemoveFromDatabase whether to remove the item from the database or not
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
bool BRemoveObject( CGCSharedObjectCache *pSOCache, CSharedObject *pObject );
|
|
|
|
/**
|
|
* Marks in the transaction that the object was modified. The object must have been previously added via
|
|
* the AddManagedObject() call in order for the object to be marked dirty. If the object is new to the
|
|
* CGCSharedObjectCache, then calling this will return false (which is not necessarily an error)
|
|
*
|
|
* @param pObject the object that will be modified
|
|
* @param unFieldIdx the field that was changed
|
|
* @return true if the field was marked dirty, false otherwise.
|
|
*/
|
|
bool BModifiedObject( CSharedObject *pObject, uint32 unFieldIdx );
|
|
|
|
/**
|
|
* @param pSOCache
|
|
* @param soIndex
|
|
* @return the CSharedObject that matches either in the CGCSharedObjectCache or to be added
|
|
*/
|
|
CSharedObject *FindSharedObject( CGCSharedObjectCache *pSOCache, const CSharedObject &soIndex );
|
|
|
|
/**
|
|
* Rolls back any changes made to the objects in-memory and in the database
|
|
*
|
|
* This function should not be made virtual -- it's called from within the destructor.
|
|
*/
|
|
void Rollback();
|
|
|
|
/**
|
|
* Commits any changes to the database and also to memory
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
bool BYieldingCommit( bool bAllowEmpty = false );
|
|
|
|
/**
|
|
* @return GCSDK::CSQLAccess associated with this transaction
|
|
*/
|
|
CSQLAccess &GetSQLAccess() { return m_sqlAccess; }
|
|
|
|
protected:
|
|
|
|
/**
|
|
* Reverts all in-memory modifications and deletes all newly created objects.
|
|
*
|
|
* This function should not be made virtual -- it's called from within the destructor.
|
|
*/
|
|
void Undo();
|
|
|
|
struct undoinfo_t
|
|
{
|
|
CSharedObject *pObject;
|
|
CGCSharedObjectCache *pSOCache;
|
|
CSharedObject *pOriginalCopy;
|
|
bool bAddToDatabase;
|
|
};
|
|
|
|
// variables
|
|
CUtlVector< undoinfo_t > m_vecObjects_Added;
|
|
CUtlVector< undoinfo_t > m_vecObjects_Removed;
|
|
CUtlVector< undoinfo_t > m_vecObjects_Modified;
|
|
CSQLAccess &m_sqlAccess;
|
|
}; // class CSharedObjectTransaction
|
|
|
|
}; // namespace GCSDK
|
|
|
|
#endif // SHAREDOBJECTTRANSACTION_H
|