#ifdef __MWERKS__
#define _CPP_DBCONTEXT
#endif
#include <Security/DbContext.h>
#include <Security/Database.h>
#include <Security/cssmerr.h>
#include <Security/utilities.h>
DbContext::DbContext (Database &inDatabase,
DatabaseSession &inDatabaseSession,
CSSM_DB_ACCESS_TYPE inAccessRequest,
const CSSM_ACCESS_CREDENTIALS *inAccessCred) :
mDatabase (inDatabase),
mDatabaseSession (inDatabaseSession),
mAccessRequest (inAccessRequest)
{
}
DbContext::~DbContext ()
{
}
#if 0
CSSM_HANDLE
DbContext::dataGetFirst(const DLQuery *inQuery,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes,
CssmData *inoutData,
CSSM_DB_UNIQUE_RECORD_PTR &outUniqueRecord)
{
auto_ptr<DbQuery> aQuery(mDatabase.makeQuery(const DLQuery *inQuery));
try
{
mDatabase.dataGetNext(*aQuery, inoutAttributes, inoutData, outUniqueRecord);
StLock<Mutex> _(mDbQuerySet);
mDbQuerySet.insert(aQuery.get());
}
catch(...)
{
mDatabase.dataAbortQuery(*aQuery);
throw;
}
return reinterpret_cast<CSSM_HANDLE>(aQuery.release());
}
void
DbContext::dataGetNext(CSSM_HANDLE inResultsHandle,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes,
CssmData *inoutData,
CSSM_DB_UNIQUE_RECORD_PTR &outUniqueRecord)
{
DbQuery *aQuery = reinterpret_cast<DbQuery *>(inResultsHandle);
{
StLock<Mutex> _(mDbQuerySet);
DbQuerySet::iterator it = mDbQuerySet.find(aQuery);
if (it == mDbContextMap.end())
CssmError::throwMe(CSSMERR_DL_INVALID_RESULTS_HANDLE);
}
try
{
mDatabase.dataGetNext(*aQuery, inoutAttributes, inoutData, outUniqueRecord);
}
catch(...)
{
{
StLock<Mutex> _(mDbQuerySet);
mDbQuerySet.erase(aQuery);
}
try
{
mDatabase.dataAbortQuery(*aQuery);
}
catch(...) {}
delete aQuery;
throw;
}
}
void
DbContext::dataAbortQuery(CSSM_HANDLE inResultsHandle)
{
DbQuery *aQuery = reinterpret_cast<DbQuery *>(inResultsHandle);
{
StLock<Mutex> _(mDbQuerySet);
DbQuerySet::iterator it = mDbQuerySet.find(aQuery);
if (it == mDbContextMap.end())
CssmError::throwMe(CSSMERR_DL_INVALID_RESULTS_HANDLE);
mDbContextMap.erase(it);
}
try
{
mDatabase.dataAbortQuery(*aQuery);
}
catch(...)
{
delete aQuery;
throw;
}
delete aQuery;
}
#endif