/* * 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 . */ // This is -*- C++ -*- /***************************************************************************** * * * PURPOSE: * * * COMMENTS: * uses embedded SQL * *****************************************************************************/ static const char rcsid[] = "@(#)reladminif,OIdIf: $Id: oidif.ec,v 1.5 2003/12/27 23:11:43 rasdev Exp $"; #include "debug-srv.hh" // general embedded SQL related definitions EXEC SQL include "sqlglobals.h"; #include "oidif.hh" #include "raslib/rmdebug.hh" #include "sqlerror.hh" #include "adminif.hh" void OId::initialize() { RMDBGENTER(4, RMDebug::module_adminif, "OId", "initialize()"); ENTER( "OId::initialize" ); loadedOk = false; EXEC SQL BEGIN DECLARE SECTION; long nextoid; char name[STRING_MAXLEN]; EXEC SQL END DECLARE SECTION; nextoid = 0; for (int i = 1; i < maxCounter; i++) { (void) strncpy( name, (char*) counterNames[i], (size_t) sizeof(name) ); TALK( "EXEC SQL SELECT NextValue INTO :nextoid FROM RAS_COUNTERS WHERE CounterName = " << name ); EXEC SQL SELECT NextValue INTO :nextoid FROM RAS_COUNTERS WHERE CounterName = :name; TALK( "-> nextoid=" << nextoid ); if (check("OId::initialize() SELECT OId")) { RMInit::logOut << "OId::initialize() error reading " << name << endl; generateException(); } *counterIds[i] = nextoid; RMDBGMIDDLE(4, RMDebug::module_adminif, "OIdIf", "read " << counterNames[i] << " " << *counterIds[i]); } loadedOk = true; LEAVE( "OId::initialize" ); RMDBGEXIT(4, RMDebug::module_adminif, "OId", "initialize()"); } void OId::deinitialize() { RMDBGENTER(4, RMDebug::module_adminif, "OId", "deinitialize()"); ENTER( "OId::deinitialize" ); if (AdminIf::isReadOnlyTA()) { RMDBGMIDDLE(4, RMDebug::module_adminif, "OIdIf", "do nothing is read only"); } else { if (AdminIf::isAborted()) { RMDBGMIDDLE(4, RMDebug::module_adminif, "OIdIf", "do nothing is aborted"); } else if(loadedOk==false) { RMDBGMIDDLE(4, RMDebug::module_adminif, "OIdIf", "avoiding to write uninitialized counters into DB"); } else { EXEC SQL BEGIN DECLARE SECTION; long nextoid1; char name2[STRING_MAXLEN]; EXEC SQL END DECLARE SECTION; for (int i = 1; i < maxCounter; i++) { nextoid1 = *counterIds[i]; (void) strncpy( name2, (char*) counterNames[i], (size_t) sizeof(name2) ); RMDBGMIDDLE(4, RMDebug::module_adminif, "OIdIf", "setting " << name2 << " to " << nextoid1) TALK( "EXEC SQL UPDATE RAS_COUNTERS SET NextValue = " << nextoid1 << " WHERE CounterName = " << name2 ); EXEC SQL UPDATE RAS_COUNTERS SET NextValue = :nextoid1 WHERE CounterName = :name2; if (check("OId::deinitialize() UPDATE OId")) { RMInit::logOut << "OId::deinitialize() error writing " << name2 << endl; } } } } loadedOk = false; LEAVE( "OId::deinitialize" ); RMDBGEXIT(4, RMDebug::module_adminif, "OId", "deinitialize()"); }