/* * 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 . / /** * SOURCE: rasmgr_dbm.cc * * MODULE: rasmgr * CLASS: DatabaseHost, DatabaseHostManager, Database, DatabaseManager * * COMMENTS: * none * \*/ #include "rasmgr_dbm.hh" #include "rasmgr_srv.hh" #include "rasmgr_users.hh" #include "debug.hh" extern bool hostCmp( const char *h1, const char *h2); DatabaseHost::DatabaseHost() { hostName[0]=0; connectString[0]=0; valid=false; activServers=0; } DatabaseHost::~DatabaseHost() { } const char* DatabaseHost::getName() { return hostName; } const char* DatabaseHost::getConnectionString() { return connectString; } void DatabaseHost::changeConnectionString(const char *connectString) { strcpy(this->connectString,connectString); } void DatabaseHost::changeName(const char *newName) { strcpy(hostName,newName); } void DatabaseHost::init(const char* hostName,const char* connectString) { strcpy(this->hostName,hostName); strcpy(this->connectString,connectString); valid=true; } void DatabaseHost::regStartServer() { activServers++;} void DatabaseHost::regDownServer() { activServers--;} //void DatabaseHost::incrConnServers() { connServers++;} //void DatabaseHost::decrConnServers() { connServers--;} //void DatabaseHost::incrConnDatabases() { connDatabases++;} //void DatabaseHost::decrConnDatabases() { connDatabases--;} bool DatabaseHost::isBusy() { //std::cout<<"DBH="<::iterator iter=hostPtrList.begin(); for(int i=0;igetName(),hostName)) { for(int j=0;jdecrConnDatabases(); hostPtrList.erase(iter); return true; } iter++; } return false;; } void Database::disconnectForRemove() { // this means disconnect from all database hosts list::iterator iter=hostPtrList.begin(); int listsize=hostPtrList.size(); for(int i=0;idecrConnDatabases(); iter++; } for(int i=0;i::iterator iter=hostPtrList.begin(); for(int i=0;i::iterator iter=hostPtrList.begin(); for(int i=0;igetName(); } return "noHost!"; } bool Database::connectToRasServer(const char *serverName) { RasServer &rasServer=rasManager[serverName]; if(rasServer.isValid()==false) return false; // no such serverName if(checkConnection(rasServer)) return false; // is already connected rasPtrList.push_back(&rasServer); return true; } bool Database::disconnectFromRasServer(const char *serverName) { list::iterator iter=rasPtrList.begin(); for(int i=0;igetName(),serverName)) { rasPtrList.erase(iter); return true; } iter++; } return false; } bool Database::isConnectedToRasServer(const char *serverName) { RasServer &r = rasManager[serverName]; if(r.isValid()==false) return false; return checkConnection(r); } int Database::countConnectionsToRasServers() { return rasPtrList.size(); } const char* Database::getRasServerName(int x) { if( x < rasPtrList.size() ) { list::iterator iter=rasPtrList.begin(); for(int i=0;igetName(); } return "noRasServer!"; } bool Database::checkConnection(RasServer &rasServer) { list::iterator iter=rasPtrList.begin(); for(int i=0;i::iterator iter=dtbList.begin(); for(int i=0;igetName(),databaseName)) { iter->disconnectForRemove(); dtbList.erase(iter); return true; } iter++; } return false; } bool DatabaseManager::testUniqueness(const char* databaseName) { list::iterator iter=dtbList.begin(); for(int i=0;igetName(),databaseName)) return false; iter++; } return true; } Database& DatabaseManager::operator[](int x) { list::iterator iter=dtbList.begin(); for(int i=0;i::iterator iter=dtbList.begin(); for(int i=0;igetName(),dbName)) return *iter; iter++; } return protElem; } void DatabaseManager::disconnectAllDatabasesFromDBH(const char* dbhName) { list::iterator iter=dtbList.begin(); for(int i=0;idisconnectFromDBHost(dbhName); } } int DatabaseManager::countDatabases() { return dtbList.size(); } bool DatabaseManager::reset() { if(config.isTestModus()==false) return false; list::iterator iter=dtbList.begin(); for(int i=0;idisconnectForRemove(); } while(dtbList.size()) { dtbList.pop_front(); } return true; } bool DatabaseManager::acceptChangeName(const char *oldName,const char *newName) { if(hostCmp(oldName,newName)) return true; // if someone really wants to change a name with the same, return testUniqueness(newName); }