From 8f27e65bddd7d4b8515ce620fb485fdd78fcdf89 Mon Sep 17 00:00:00 2001 From: Constantin Jucovschi Date: Fri, 24 Apr 2009 07:20:22 -0400 Subject: Initial commit --- reladminif/objectbrokercommon.cc | 1144 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 1144 insertions(+) create mode 100644 reladminif/objectbrokercommon.cc (limited to 'reladminif/objectbrokercommon.cc') diff --git a/reladminif/objectbrokercommon.cc b/reladminif/objectbrokercommon.cc new file mode 100644 index 0000000..648f3c6 --- /dev/null +++ b/reladminif/objectbrokercommon.cc @@ -0,0 +1,1144 @@ +/* +* This file is part of rasdaman community. +* +* Rasdaman community is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Rasdaman community is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with rasdaman community. If not, see . +* +* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / +rasdaman GmbH. +* +* For more information please see +* or contact Peter Baumann via . +*/ +#include +#include +#include +#include + +#include "raslib/rmdebug.hh" +#include "raslib/minterval.hh" +#include "objectbroker.hh" +#include "dbnamedobject.hh" +#include "relstorageif/dbstoragelayout.hh" +#include "adminif.hh" +#include "relcatalogif/alltypes.hh" +#include "relindexif/hierindex.hh" +#include "relblobif/blobtile.hh" +#include "relcatalogif/dbminterval.hh" +#include "relblobif/inlinetile.hh" +#include "relindexif/dbtcindex.hh" +#include "sqlerror.hh" +#include "relindexif/indexid.hh" +#include "relmddif/mddid.hh" +#include "dbref.hh" +#include "relmddif/dbmddobj.hh" +#include "catalogmgr/typefactory.hh" +#include "relmddif/dbmddset.hh" +#include "relindexif/dbrcindexds.hh" +#include "debug.hh" + +#ifdef LINUX +template class DBRef; +template class DBRef; +template class DBRef; +#endif + +using namespace std; + +LongType* +ObjectBroker::theLong = 0; + +ShortType* +ObjectBroker::theShort = 0; + +OctetType* +ObjectBroker::theOctet = 0; + +ULongType* +ObjectBroker::theULong = 0; + +UShortType* +ObjectBroker::theUShort = 0; + +CharType* +ObjectBroker::theChar = 0; + +BoolType* +ObjectBroker::theBool = 0; + +DoubleType* +ObjectBroker::theDouble = 0; + +FloatType* +ObjectBroker::theFloat = 0; + +ComplexType1* +ObjectBroker::theComplex1 = 0; + +ComplexType2* +ObjectBroker::theComplex2 = 0; + +DBObjectPMap +ObjectBroker::theAtomicTypes; + +DBObjectPMap +ObjectBroker::theSetTypes; + +DBObjectPMap +ObjectBroker::theMDDTypes; + +DBObjectPMap +ObjectBroker::theMDDBaseTypes; + +DBObjectPMap +ObjectBroker::theMDDDimensionTypes; + +DBObjectPMap +ObjectBroker::theMDDDomainTypes; + +DBObjectPMap +ObjectBroker::theStructTypes; + +DBObjectPMap +ObjectBroker::theDBMintervals; + +DBObjectPMap +ObjectBroker::theDBMDDObjs; + +DBObjectPMap +ObjectBroker::theMDDSets; + +DBObjectPMap +ObjectBroker::theDBStorages; + +DBObjectPMap +ObjectBroker::theDBHierIndexs; + +DBObjectPMap +ObjectBroker::theDBTCIndexs; + +DBObjectPMap +ObjectBroker::theBLOBTiles; + +DBObjectPMap +ObjectBroker::theInlineTiles; + +DBObjectPMap +ObjectBroker::theRCIndexes; + +OIdMap +ObjectBroker::theTileIndexMappings; + +bool +ObjectBroker::freeMemory() throw (r_Error) + { + RMDBGONCE(0, RMDebug::module_adminif, "ObjectBroker", "memoryOverFlow()"); + bool retval = false; + DBRef::setPointerCaching(false); + DBRef::setPointerCaching(false); + DBRef::setPointerCaching(false); + if (!ObjectBroker::theBLOBTiles.empty()) + { + int theLucky = ObjectBroker::theBLOBTiles.size() / 2; + DBObjectPMap::iterator it = ObjectBroker::theBLOBTiles.begin(); + for (int i = 0; i < theLucky; i++, it++); + delete (*it).second; + retval = true; + } + return retval; + } + +void +ObjectBroker::init() + { + RMDBGENTER(2, RMDebug::module_adminif, "ObjectBroker", "init()"); + ObjectBroker::theLong = new LongType(); + + ObjectBroker::theShort = new ShortType(); + + ObjectBroker::theOctet = new OctetType(); + + ObjectBroker::theULong = new ULongType(); + + ObjectBroker::theUShort = new UShortType(); + + ObjectBroker::theChar = new CharType(); + + ObjectBroker::theBool = new BoolType(); + + ObjectBroker::theDouble = new DoubleType(); + + ObjectBroker::theFloat = new FloatType(); + + ObjectBroker::theComplex1 = new ComplexType1(); + + ObjectBroker::theComplex2 = new ComplexType2(); + + DBObject* atomicTypes[] = {theComplex2, theComplex1, theFloat, theDouble, theOctet, theShort, theLong, theUShort, theBool, theChar, theULong}; + RMDBGIF(0, RMDebug::module_adminif, "ObjectBroker", \ + if (sizeof(atomicTypes)/sizeof(DBObject*) != TypeFactory::MaxBuiltInId) \ + { \ + RMInit::logOut << "ObjectBroker::init() not all atomic types were added!" << endl; \ + exit(1); \ + } ) + for (unsigned int a = 0; a < sizeof(atomicTypes)/sizeof(DBObject*); a++) + { + DBObjectPPair myPair(atomicTypes[a]->getOId(), atomicTypes[a]); + theAtomicTypes.insert(myPair); + } + RMDBGEXIT(2, RMDebug::module_adminif, "ObjectBroker", "init()"); + } + +void +ObjectBroker::deinit() + { + RMDBGONCE(2, RMDebug::module_adminif, "ObjectBroker", "deinit()"); + if (ObjectBroker::theLong != 0) + { + delete ObjectBroker::theLong; + ObjectBroker::theLong = 0; + } + + if (ObjectBroker::theShort != 0) + { + delete ObjectBroker::theShort; + ObjectBroker::theShort = 0; + } + + if (ObjectBroker::theOctet != 0) + { + delete ObjectBroker::theOctet; + ObjectBroker::theOctet = 0; + } + + if (ObjectBroker::theULong != 0) + { + delete ObjectBroker::theULong; + ObjectBroker::theULong = 0; + } + + if (ObjectBroker::theUShort != 0) + { + delete ObjectBroker::theUShort; + ObjectBroker::theUShort = 0; + } + + if (ObjectBroker::theChar != 0) + { + delete ObjectBroker::theChar; + ObjectBroker::theChar = 0; + } + + if (ObjectBroker::theBool != 0) + { + delete ObjectBroker::theBool; + ObjectBroker::theBool = 0; + } + + if (ObjectBroker::theDouble != 0) + { + delete ObjectBroker::theDouble; + ObjectBroker::theDouble = 0; + } + + if (ObjectBroker::theFloat != 0) + { + delete ObjectBroker::theFloat; + ObjectBroker::theFloat = 0; + } + + if (ObjectBroker::theComplex1 != 0) + { + delete ObjectBroker::theComplex1; + ObjectBroker::theComplex1 = 0; + } + + if (ObjectBroker::theComplex2 != 0) + { + delete ObjectBroker::theComplex2; + ObjectBroker::theComplex2 = 0; + } + + theAtomicTypes.clear(); + + theSetTypes.clear(); + + theMDDTypes.clear(); + + theMDDBaseTypes.clear(); + + theMDDDimensionTypes.clear(); + + theMDDDomainTypes.clear(); + + theStructTypes.clear(); + + theDBMintervals.clear(); + + theDBMDDObjs.clear(); + + theMDDSets.clear(); + + theDBStorages.clear(); + + theDBHierIndexs.clear(); + + theDBTCIndexs.clear(); + + theBLOBTiles.clear(); + + theInlineTiles.clear(); + + theRCIndexes.clear(); + + theTileIndexMappings.clear(); + } + +DBObject* +ObjectBroker::getObjectByOId(const OId& id) throw (r_Error) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "getObjectByOId(" << id << " " << id.getType() << ")"); + DBObject* retval = 0; + if (id.getType() == OId::INVALID) + retval = 0; + else { + retval = ObjectBroker::isInMemory(id); + if (retval == 0) + { + switch (id.getType()) + { + case OId::MDDOID: + retval = loadDBMDDObj(id); + break; + case OId::MDDCOLLOID: + retval = loadMDDSet(id); + break; + case OId::MDDTYPEOID: + retval = loadMDDType(id); + break; + case OId::MDDBASETYPEOID: + retval = loadMDDBaseType(id); + break; + case OId::MDDDIMTYPEOID: + retval = loadMDDDimensionType(id); + break; + case OId::MDDDOMTYPEOID: + retval = loadMDDDomainType(id); + break; + case OId::STRUCTTYPEOID: + retval = loadStructType(id); + break; + case OId::SETTYPEOID: + retval = loadSetType(id); + break; + case OId::BLOBOID: + retval = loadBLOBTile(id); + break; + case OId::DBMINTERVALOID: + retval = loadDBMinterval(id); + break; + case OId::STORAGEOID: + retval = loadDBStorage(id); + break; + case OId::MDDHIERIXOID: + retval = loadDBHierIndex(id); + break; + case OId::DBTCINDEXOID: + retval = loadDBTCIndex(id); + break; + case OId::INLINETILEOID: + retval = loadInlineTile(id); + break; + case OId::MDDRCIXOID: + retval = loadDBRCIndexDS(id); + break; + case OId::ATOMICTYPEOID: + RMInit::logOut << "Atomic type not found in memory." << endl; + default: + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "getObjectByOId(" << id << " " << id.getType() << ")"); + RMInit::logOut << "Retrival of Object Failed (Internal State 3)." << endl << "Please contact Customer Support." << endl; + throw r_Error(INVALID_OIDTYPE); + break; + } + } + } + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "getObjectByOId(" << id << " " << id.getType() << ") " << retval); + return retval; + } + + +DBObject* +ObjectBroker::isInMemory(const OId& id) throw (r_Error) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "isInMemory(" << id << " " << id.getType() << ")"); + DBObject* retval = 0; + DBObjectPMap& theMap = ObjectBroker::getMap(id.getType()); + DBObjectPMap::iterator i = theMap.find(id); + if (i != theMap.end()) + { + retval = (*i).second; + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "found object with that id in map at " << (unsigned long)retval << " with id " << retval->getOId()); + } + else { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "did not find object with that id in map"); + } + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "isInMemory(" << id << " ( " << id.getCounter() << " "<< id.getType() << " ) ) " << retval); + return retval; + } + +void +ObjectBroker::registerDBObject(DBObject* obj) + { + DBObjectPPair myPair(obj->getOId(), obj); + ObjectBroker::getMap(obj->getOId().getType()).insert(myPair); + } + +void +ObjectBroker::deregisterDBObject(const OId& id) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "deregisterDBObject(" << id << ")"); + if (id.getType() != OId::INVALID) + { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "size of map before\t: " << ObjectBroker::getMap(id.getType()).size()); + DBObjectPMap& t = ObjectBroker::getMap(id.getType()); + DBObjectPMap::iterator i = t.find(id); + if (i != t.end()) + { + (*i).second = 0; + t.erase(i); + } + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "size of map after \t: " << ObjectBroker::getMap(id.getType()).size()); + } + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "deregisterDBObject(" << id << ")"); + } + +OIdSet* +ObjectBroker::getAllObjects(OId::OIdType type) + { + OIdSet* retval = 0; + switch (type) + { + case OId::MDDCOLLOID: + retval = getAllMDDSets(); + break; + case OId::MDDOID: + retval = getAllMDDObjects(); + break; + case OId::MDDTYPEOID: + retval = getAllMDDTypes(); + break; + case OId::MDDBASETYPEOID: + retval = getAllMDDBaseTypes(); + break; + case OId::MDDDIMTYPEOID: + retval = getAllMDDDimensionTypes(); + break; + case OId::MDDDOMTYPEOID: + retval = getAllMDDDomainTypes(); + break; + case OId::STRUCTTYPEOID: + retval = getAllStructTypes(); + break; + case OId::SETTYPEOID: + retval = getAllSetTypes(); + break; + case OId::ATOMICTYPEOID: + retval = getAllAtomicTypes(); + break; + + default: + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "getAllObjects(" << type << ")"); + RMInit::logOut << "Retrival of Object Failed (Internal State 4)." << endl << "Please contact Customer Support." << endl; + throw r_Error(INVALID_OIDTYPE); + break; + } + return retval; + } + + +OId +ObjectBroker::getOIdByName(OId::OIdType type, const char* name) throw (r_Error) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "getOIdByName(" << type << ", " << name << ")"); + OId id; + switch (type) + { + case OId::MDDCOLLOID: + id = getOIdOfMDDSet(name); + break; + case OId::MDDTYPEOID: + id = getOIdOfMDDType(name); + break; + case OId::MDDBASETYPEOID: + id = getOIdOfMDDBaseType(name); + break; + case OId::MDDDIMTYPEOID: + id = getOIdOfMDDDimensionType(name); + break; + case OId::MDDDOMTYPEOID: + id = getOIdOfMDDDomainType(name); + break; + case OId::STRUCTTYPEOID: + id = getOIdOfStructType(name); + break; + case OId::SETTYPEOID: + id = getOIdOfSetType(name); + break; + case OId::ATOMICTYPEOID: + if(strcmp(name, ULongType::Name) == 0) + id = theULong->getOId(); + else if(strcmp(name, BoolType::Name) == 0) + id = theBool->getOId(); + else if(strcmp(name, CharType::Name) == 0) + id = theChar->getOId(); + else if(strcmp(name, UShortType::Name) == 0) + id = theUShort->getOId(); + else if(strcmp(name, LongType::Name) == 0) + id = theLong->getOId(); + else if(strcmp(name, ShortType::Name) == 0) + id = theShort->getOId(); + else if(strcmp(name, OctetType::Name) == 0) + id = theOctet->getOId(); + else if(strcmp(name, DoubleType::Name) == 0) + id = theDouble->getOId(); + else if(strcmp(name, FloatType::Name) == 0) + id = theFloat->getOId(); + else if(strcmp(name, ComplexType1::Name) == 0) + id = theComplex1->getOId(); + else if(strcmp(name, ComplexType2::Name) == 0) + id = theComplex2->getOId(); + break; + + default: + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "getOIdByName(" << type << ", " << name << ")"); + RMInit::logOut << "Retrival of Object Failed (Internal State 5)." << endl << "Please contact Customer Support." << endl; + throw r_Error(INVALID_OIDTYPE); + break; + } + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "getOIdByName(" << type << ", " << name << ") " << id << " " << id.getType()); + return id; + } + + +DBObject* +ObjectBroker::getObjectByName(OId::OIdType type, const char* name) throw (r_Error) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "getObjectByName(" << type << ", " << name << ")"); + DBObject* retval = 0; + DBObjectPMap* theMap = 0; + switch (type) + { + case OId::MDDCOLLOID: + theMap = &theMDDSets; + break; + case OId::MDDTYPEOID: + theMap = &theMDDTypes; + break; + case OId::MDDBASETYPEOID: + theMap = &theMDDBaseTypes; + break; + case OId::MDDDIMTYPEOID: + theMap = &theMDDDimensionTypes; + break; + case OId::MDDDOMTYPEOID: + theMap = &theMDDDomainTypes; + break; + case OId::STRUCTTYPEOID: + theMap = &theStructTypes; + break; + case OId::SETTYPEOID: + theMap = &theSetTypes; + break; + case OId::ATOMICTYPEOID: + theMap = &theAtomicTypes; + break; + default: + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "getObjectByName(" << type << ", " << name << ")"); + RMInit::logOut << "Retrival of Object Failed (Internal State 6)." << endl << "Please contact Customer Support." << endl; + throw r_Error(INVALID_OIDTYPE); + break; + } + + //check if there is an object with that name already in memory + for (DBObjectPMap::iterator iter = theMap->begin(); iter != theMap->end(); iter++) + { + if (strcmp(((DBNamedObject*)(*iter).second)->getName(), name) == 0) + { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", name << " equals " << ((DBNamedObject*)(*iter).second)->getName()); + retval = (*iter).second; + break; + } + else { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", name << " equals NOT " << ((DBNamedObject*)(*iter).second)->getName()); + } + } + + //no - no matching object. try loading from db + if (!retval) + { + retval = ObjectBroker::getObjectByOId(ObjectBroker::getOIdByName(type,name)); + } + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "getObjectByName(" << type << ", " << name << ") " << retval); + return retval; + } + +void +ObjectBroker::clearMap(DBObjectPMap& theMap) throw (r_Error) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "clearMap()"); + DBObjectPVector test; + test.reserve(theMap.size()); + if (AdminIf::isAborted() || AdminIf::isReadOnlyTA()) + { + //only delete objects that are modifed/not cached + for (DBObjectPMap::iterator i = theMap.begin(); i != theMap.end(); i++ ) + { + if ((*i).second->isModified() || !(*i).second->isCached()) + { + RMDBGMIDDLE(117, RMDebug::module_adminif, "ObjectBroker", "preparing to delete " << (*i).second->getOId() << " " << (*i).second->getOId().getType()); + test.push_back((*i).second); + //(*i).second = 0; not good because of circular dependencies in the destructors + } + else { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "leaving alone " << (*i).second->getOId() << " " << (*i).second->getOId().getType()); + } + } + } + else { + //only delete objects that are not cached. validate the cached objects. + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "theMap are validated"); + for (DBObjectPMap::iterator i = theMap.begin(); i != theMap.end(); i++ ) + { + if ((*i).second->isCached()) + { + RMDBGMIDDLE(117, RMDebug::module_adminif, "ObjectBroker", "leaving alone because of cache " << (*i).second->getOId() << " " << (*i).second->getOId().getType()); + (*i).second->validate(); + } + else { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "preparing to delete " << (*i).second->getOId() << " " << (*i).second->getOId().getType()); + test.push_back((*i).second); + //(*i).second = 0; not good because of circular dependencies in the destructors + } + } + } + for (DBObjectPVector::iterator i2 = test.begin(); i2 != test.end(); i2++) + { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "deleting " << (*i2)->getOId() << " " << (*i2)->getOId().getType() << " size " << (*i2)->getMemorySize()); + delete (*i2); + } + test.clear(); + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "clearMap() "); + } + +void +ObjectBroker::completelyClearMap(DBObjectPMap& theMap) throw (r_Error) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "completelyClearMap()"); + DBObjectPVector test; + test.reserve(theMap.size()); + for (DBObjectPMap::iterator i = theMap.begin(); i != theMap.end(); i++ ) + { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "preparing to delete " << (*i).second->getOId() << " " << (*i).second->getOId().getType()); + (*i).second->validate(); + test.push_back((*i).second); + //(*i).second = 0; not good because of circular dependencies in the destructors + } + for (DBObjectPVector::iterator i2 = test.begin(); i2 != test.end(); i2++) + { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "deleting " << (*i2)->getOId() << " " << (*i2)->getOId().getType()); + delete (*i2); + } + test.clear(); + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "completelyClearMap() "); + } + +void +ObjectBroker::clearBroker() throw (r_Error) + { + //do not ever clear the ATOMICTYPEOID map! those are on the stack, not heap! +// ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::UDFOID)); +// ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::UDFPACKAGEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDCOLLOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDHIERIXOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDRCIXOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::DBTCINDEXOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::INLINETILEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::STORAGEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::SETTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDDOMTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDDIMTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDBASETYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::STRUCTTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::DBMINTERVALOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::BLOBOID)); + theTileIndexMappings.clear(); + } + +void +ObjectBroker::clearCache() throw (r_Error) + { + //do not ever clear the ATOMICTYPEOID map! those are on the stack, not heap! +// ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::UDFOID)); +// ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::UDFPACKAGEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDCOLLOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDHIERIXOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDRCIXOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::DBTCINDEXOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::INLINETILEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::STORAGEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::SETTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDDOMTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDDIMTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDBASETYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::MDDTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::STRUCTTYPEOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::DBMINTERVALOID)); + ObjectBroker::completelyClearMap(ObjectBroker::getMap(OId::BLOBOID)); + theTileIndexMappings.clear(); + } + +DBObjectPMap& +ObjectBroker::getMap(OId::OIdType type) throw (r_Error) + { + DBObjectPMap* theMap = 0; + switch (type) + { + case OId::MDDOID: + theMap = &theDBMDDObjs; + break; + case OId::MDDCOLLOID: + theMap = &theMDDSets; + break; + case OId::MDDTYPEOID: + theMap = &theMDDTypes; + break; + case OId::MDDBASETYPEOID: + theMap = &theMDDBaseTypes; + break; + case OId::MDDDIMTYPEOID: + theMap = &theMDDDimensionTypes; + break; + case OId::MDDDOMTYPEOID: + theMap = &theMDDDomainTypes; + break; + case OId::STRUCTTYPEOID: + theMap = &theStructTypes; + break; + case OId::SETTYPEOID: + theMap = &theSetTypes; + break; + case OId::BLOBOID: + theMap = &theBLOBTiles; + break; + case OId::INLINETILEOID: + theMap = &theInlineTiles; + break; + case OId::DBMINTERVALOID: + theMap = &theDBMintervals; + break; + case OId::STORAGEOID: + theMap = &theDBStorages; + break; + case OId::DBTCINDEXOID: + theMap = &theDBTCIndexs; + break; + case OId::MDDHIERIXOID: + theMap = &theDBHierIndexs; + break; + case OId::ATOMICTYPEOID: + theMap = &theAtomicTypes; + break; + case OId::MDDRCIXOID: + theMap = &theRCIndexes; + break; + default: + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "getMap(" << type << ")"); + RMInit::logOut << "Retrival of Object Failed (Internal State 7)." << endl << "Please contact Customer Support." << endl; + throw r_Error(INVALID_OIDTYPE); + break; + } + return *theMap; + } + +DBObject* +ObjectBroker::loadDBStorage(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new DBStorageLayout(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + theDBStorages.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + +DBObject* +ObjectBroker::loadSetType(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new SetType(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + theSetTypes.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + +DBObject* +ObjectBroker::loadMDDType(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new MDDType(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(),retval); + theMDDTypes.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + + +DBObject* +ObjectBroker::loadMDDBaseType(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new MDDBaseType(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + theMDDBaseTypes.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + + +DBObject* +ObjectBroker::loadMDDDimensionType(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new MDDDimensionType(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + theMDDDimensionTypes.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + + +DBObject* +ObjectBroker::loadMDDDomainType(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new MDDDomainType(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + theMDDDomainTypes.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + + +DBObject* +ObjectBroker::loadStructType(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new StructType(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + theStructTypes.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + + +DBObject* +ObjectBroker::loadDBMinterval(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new DBMinterval(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair( retval->getOId(), retval); + theDBMintervals.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + + +DBObject* +ObjectBroker::loadDBMDDObj(const OId& id) throw (r_Error) +{ + ENTER( "ObjectBroker::loadDBMDDObj, id=" << id ); + + DBObject* retval = 0; + try + { + retval = new DBMDDObj(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + TALK( "found object, inserting " << retval->getOId() << " into result list" ); + theDBMDDObjs.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + LEAVE( "ObjectBroker::loadDBMDDObj, object not found in db, throwing error " << error.what() ); + throw error; + } + + LEAVE( "ObjectBroker::loadDBMDDObj, retval=" << retval ); + return retval; +} + + +DBObject* +ObjectBroker::loadMDDSet(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new DBMDDSet(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(),retval); + theMDDSets.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + +DBObject* +ObjectBroker::loadDBTCIndex(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new DBTCIndex(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(), retval); + retval->setCached(true); + theDBTCIndexs.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + +DBObject* +ObjectBroker::loadDBHierIndex(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new DBHierIndex(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair(retval->getOId(),retval); + retval->setCached(true); + theDBHierIndexs.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + + +DBObject* +ObjectBroker::loadBLOBTile(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new BLOBTile(id); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair( retval->getOId(),retval); + theBLOBTiles.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + if(retval) + { + delete retval; + retval=0; + } + throw error; + } + return retval; + } + +DBObject* +ObjectBroker::loadDBRCIndexDS(const OId& id) throw (r_Error) + { + DBObject* retval = 0; + try { + retval = new DBRCIndexDS(id); + retval->setCached(true); + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "found in db"); + DBObjectPPair myPair( retval->getOId(),retval); + theRCIndexes.insert(myPair); + } + catch (r_Error& error) + { + RMDBGONCE(11, RMDebug::module_adminif, "ObjectBroker", "not found in db"); + delete retval; + throw error; + } + return retval; + } + +void +ObjectBroker::registerTileIndexMapping(const OId& tileoid, const OId& indexoid) + { + OIdPair p(tileoid, indexoid); + theTileIndexMappings.insert(p); + } + +void +ObjectBroker::deregisterTileIndexMapping(const OId& tileoid, const OId& indexoid) + { + OIdPair p(tileoid, indexoid); + OIdMap::iterator i = theTileIndexMappings.find(tileoid); + if (i != theTileIndexMappings.end()) + theTileIndexMappings.erase(i); + else + RMDBGONCE(0, RMDebug::module_adminif, "ObjectBroker", "deregisterIndexTileMapping(" << indexoid << ", " << tileoid << ") NOT FOUND"); + } + +OIdSet* +ObjectBroker::getAllAtomicTypes() throw (r_Error) + { + RMDBGENTER(11, RMDebug::module_adminif, "ObjectBroker", "getAllAtomicTypes()"); + OIdSet* retval = new OIdSet(); + DBObjectPMap& theMap = ObjectBroker::getMap(OId::ATOMICTYPEOID); + for (DBObjectPMap::iterator i = theMap.begin(); i != theMap.end(); i++) + { + RMDBGMIDDLE(11, RMDebug::module_adminif, "ObjectBroker", "inserted from memory " << (*i).first); + retval->insert((*i).first); + } + RMDBGEXIT(11, RMDebug::module_adminif, "ObjectBroker", "getAllAtomicTypes() "); + return retval; + } + -- cgit