/*
* 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()");
}