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.
151 lines
4.6 KiB
151 lines
4.6 KiB
//========= 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
|
|
|