dvander@667: /** dvander@667: * vim: set ts=4 : dvander@667: * =============================================================== dvander@667: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@667: * =============================================================== dvander@667: * dvander@667: * This file is not open source and may not be copied without explicit dvander@667: * written permission of AlliedModders LLC. This file may not be redistributed dvander@667: * in whole or significant part. dvander@667: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@667: * dvander@667: * Version: $Id$ dvander@667: */ dvander@667: dvander@666: #include "Database.h" dvander@666: #include "HandleSys.h" dvander@862: #include "ShareSys.h" dvander@666: #include "sourcemod.h" dvander@666: dvander@666: DBManager g_DBMan; dvander@666: dvander@666: void DBManager::OnSourceModAllInitialized() dvander@666: { dvander@666: HandleAccess sec; dvander@666: dvander@666: g_HandleSys.InitAccessDefaults(NULL, &sec); dvander@666: sec.access[HandleAccess_Delete] |= HANDLE_RESTRICT_IDENTITY; dvander@666: sec.access[HandleAccess_Clone] |= HANDLE_RESTRICT_IDENTITY; dvander@666: dvander@666: m_DriverType = g_HandleSys.CreateType("IDriver", this, 0, NULL, &sec, g_pCoreIdent, NULL); dvander@666: m_DatabaseType = g_HandleSys.CreateType("IDatabase", this, 0, NULL, NULL, g_pCoreIdent, NULL); dvander@862: dvander@862: g_ShareSys.AddInterface(NULL, this); dvander@858: } dvander@858: dvander@858: void DBManager::OnSourceModShutdown() dvander@858: { dvander@858: g_HandleSys.RemoveType(m_DatabaseType, g_pCoreIdent); dvander@858: g_HandleSys.RemoveType(m_DriverType, g_pCoreIdent); dvander@858: } dvander@858: dvander@858: unsigned int DBManager::GetInterfaceVersion() dvander@858: { dvander@858: return SMINTERFACE_DBI_VERSION; dvander@858: } dvander@858: dvander@858: const char *DBManager::GetInterfaceName() dvander@858: { dvander@858: return SMINTERFACE_DBI_NAME; dvander@666: } dvander@666: dvander@666: void DBManager::OnHandleDestroy(HandleType_t type, void *object) dvander@666: { dvander@666: if (type == m_DriverType) dvander@666: { dvander@666: /* Ignore */ dvander@666: return; dvander@666: } dvander@666: dvander@858: if (g_HandleSys.TypeCheck(type, m_DatabaseType)) dvander@666: { dvander@666: IDatabase *pdb = (IDatabase *)object; dvander@666: pdb->Close(); dvander@666: } dvander@666: } dvander@666: dvander@858: bool DBManager::Connect(const char *name, IDBDriver **pdr, IDatabase **pdb, bool persistent, char *error, size_t maxlength) dvander@666: { dvander@666: const DatabaseInfo *pInfo = FindDatabaseConf(name); dvander@666: dvander@858: for (size_t i=0; idriver, m_drivers[i]->GetIdentifier()) == 0) dvander@666: { dvander@858: *pdr = m_drivers[i]; dvander@858: *pdb = m_drivers[i]->Connect(pInfo, persistent, error, maxlength); dvander@858: return (*pdb == NULL); dvander@666: } dvander@666: } dvander@666: dvander@666: *pdr = NULL; dvander@666: *pdb = NULL; dvander@666: dvander@666: return false; dvander@666: } dvander@858: dvander@858: void DBManager::AddDriver(IDBDriver *pDriver) dvander@858: { dvander@858: m_drivers.push_back(pDriver); dvander@858: } dvander@858: dvander@858: void DBManager::RemoveDriver(IDBDriver *pDriver) dvander@858: { dvander@858: for (size_t i=0; i= m_drivers.size()) dvander@858: { dvander@858: return NULL; dvander@858: } dvander@858: dvander@858: return m_drivers[index]; dvander@858: } dvander@858: dvander@858: const DatabaseInfo *DBManager::FindDatabaseConf(const char *name) dvander@858: { dvander@858: /* :TODO: */ dvander@858: return NULL; dvander@858: }