#ifndef __DOTMAC_DL_MODULE_H__
#define __DOTMAC_DL_MODULE_H__
#include "Database.h"
#include "DataStorageLibrary.h"
#include "AttachedInstance.h"
#include "TableRelation.h"
#include "DotMacRelation.h"
#include <map>
class DotMacDLModule : public DataStorageLibrary
{
protected:
static TableRelation *mSchemaRelationRelation,
*mSchemaAttributeRelation,
*mSchemaIndexRelation,
*mSchemaParsingModuleRelation; static DotMacRelation *mDotMacRelation;
static RelationMap *mRelationMap;
static void SetupSchemaRelationRelation ();
static void SetupSchemaAttributeRelation ();
static void SetupSchemaIndexRelation ();
static void SetupSchemaParsingModuleRelation ();
static void SetupDotMacRelation ();
static void InitializeRelations ();
public:
DotMacDLModule (pthread_mutex_t *globalLock, CSSM_SPI_ModuleEventHandler CssmNotifyCallback, void* CssmNotifyCallbackCtx);
~DotMacDLModule ();
AttachedInstance* MakeAttachedInstance (); static Relation* LookupRelation (CSSM_DB_RECORDTYPE relationID); };
class DotMacAttachedInstance : public AttachedInstance
{
public:
Database* MakeDatabaseObject ();
};
typedef std::map<CSSM_HANDLE, Query*> QueryMap;
class DotMacDatabase : public Database
{
protected:
std::string mDatabaseName; QueryMap mQueryMap; CSSM_HANDLE mNextHandle;
void CopyAttributes (Relation* r, Tuple *t, CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR attributes); void ExportUniqueID (UniqueIdentifier *id, CSSM_DB_UNIQUE_RECORD_PTR *uniqueID); void GetDataFromTuple (Tuple *t, CSSM_DATA &data);
public:
DotMacDatabase (AttachedInstance *ai);
~DotMacDatabase ();
virtual void DbOpen (const char* DbName,
const CSSM_NET_ADDRESS *dbLocation,
const CSSM_DB_ACCESS_TYPE accessRequest,
const CSSM_ACCESS_CREDENTIALS *accessCredentials,
const void* openParameters);
virtual void DbClose ();
virtual void DbGetDbNameFromHandle (char** dbName);
virtual CSSM_HANDLE DbDataGetFirst (const CSSM_QUERY *query,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR attributes,
CSSM_DATA_PTR data,
CSSM_DB_UNIQUE_RECORD_PTR *uniqueID);
virtual bool DbDataGetNext (CSSM_HANDLE resultsHandle,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR attributes,
CSSM_DATA_PTR data,
CSSM_DB_UNIQUE_RECORD_PTR *uniqueID);
virtual void DbDataAbortQuery (CSSM_HANDLE resultsHandle);
virtual void DbFreeUniqueRecord (CSSM_DB_UNIQUE_RECORD_PTR uniqueRecord);
virtual void DbDataGetFromUniqueRecordID (const CSSM_DB_UNIQUE_RECORD_PTR uniqueRecord,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR attributes,
CSSM_DATA_PTR data);
};
#endif