152 lines
4.6 KiB
C++
152 lines
4.6 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
#include "stdafx.h"
|
|
|
|
#include "tier0/memdbgoff.h"
|
|
|
|
namespace GCSDK
|
|
{
|
|
IMPLEMENT_CLASS_MEMPOOL( CGCSQLQuery, 1000, UTLMEMORYPOOL_GROW_SLOW );
|
|
IMPLEMENT_CLASS_MEMPOOL( CGCSQLQueryGroup, 1000, UTLMEMORYPOOL_GROW_SLOW );
|
|
}
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
namespace GCSDK
|
|
{
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Constructor.
|
|
//----------------------------------------------------------------------------
|
|
// create queries on the heap with Alloc
|
|
CGCSQLQuery::CGCSQLQuery()
|
|
{
|
|
m_pBufParams = GetBufferPool().GetBuffer();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Destructor.
|
|
//----------------------------------------------------------------------------
|
|
CGCSQLQuery::~CGCSQLQuery()
|
|
{
|
|
// free all the data
|
|
ClearParams();
|
|
GetBufferPool().ReturnBuffer( m_pBufParams );
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Gets a singleton buffer pool for bind params
|
|
//----------------------------------------------------------------------------
|
|
static GCConVar sql_bind_param_max_pool_size_mb( "sql_bind_param_max_pool_size_mb", "10", "Maximum size in bytes of the SQL Bind Param buffer pool" );
|
|
static GCConVar sql_bind_param_init_buffer_size( "sql_bind_param_init_buffer_size", "16384", "Initial buffer size for buffers in the SQL Bind Param buffer pool" );
|
|
/*static*/ CBufferPool &CGCSQLQuery::GetBufferPool()
|
|
{
|
|
static CBufferPool s_bufferPool( "SQL bind params", sql_bind_param_max_pool_size_mb, sql_bind_param_init_buffer_size );
|
|
return s_bufferPool;
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Allocates a bit of memory for the parameter and adds it to the list
|
|
//----------------------------------------------------------------------------
|
|
void CGCSQLQuery::AddBindParamRaw( EGCSQLType eType, const byte *pubData, uint32 cubData )
|
|
{
|
|
Assert( m_vecParams.Count() < k_cMaxBindParams );
|
|
if( m_vecParams.Count() >= k_cMaxBindParams )
|
|
return;
|
|
|
|
GCSQLBindParam_t ¶m = m_vecParams[ m_vecParams.AddToTail() ];
|
|
param.m_eType = eType;
|
|
param.m_cubData = cubData;
|
|
|
|
if ( cubData )
|
|
{
|
|
param.m_nOffset = m_pBufParams->TellPut();
|
|
m_pBufParams->Put( pubData, cubData );
|
|
}
|
|
else
|
|
{
|
|
param.m_nOffset = 0;
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: frees all the bind params
|
|
//----------------------------------------------------------------------------
|
|
void CGCSQLQuery::ClearParams()
|
|
{
|
|
m_vecParams.RemoveAll();
|
|
m_pBufParams->Clear();
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Constructor.
|
|
//----------------------------------------------------------------------------
|
|
// create queries on the heap with Alloc
|
|
CGCSQLQueryGroup::CGCSQLQueryGroup()
|
|
: m_pResults( NULL )
|
|
{
|
|
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Sets the result pointer
|
|
//----------------------------------------------------------------------------
|
|
CGCSQLQueryGroup::~CGCSQLQueryGroup()
|
|
{
|
|
// free all the data
|
|
Clear();
|
|
|
|
if( m_pResults )
|
|
m_pResults->Destroy();
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Adds a new query to the group
|
|
//----------------------------------------------------------------------------
|
|
void CGCSQLQueryGroup::AddQuery( CGCSQLQuery *pQuery )
|
|
{
|
|
m_vecQueries.AddToTail( pQuery );
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Sets the name (file and line) for the group
|
|
//----------------------------------------------------------------------------
|
|
void CGCSQLQueryGroup::SetName( const char *sName )
|
|
{
|
|
m_sName = sName;
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: clears all the queries in the query group and resets its name
|
|
//----------------------------------------------------------------------------
|
|
void CGCSQLQueryGroup::Clear()
|
|
{
|
|
m_vecQueries.PurgeAndDeleteElements();
|
|
m_sName = "";
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Purpose: Sets the result pointer
|
|
//----------------------------------------------------------------------------
|
|
void CGCSQLQueryGroup::SetResults( IGCSQLResultSetList *pResults )
|
|
{
|
|
if( m_pResults )
|
|
m_pResults->Destroy();
|
|
m_pResults = pResults;
|
|
}
|
|
|
|
} // namespace GCSDK
|