Go to the documentation of this file.00001 #include <stdexcept>
00002 #include <cstdlib>
00003 #include <string>
00004 #include <string.h>
00005 #include "OnlineDB/Oracle/interface/Oracle.h"
00006
00007 #include "OnlineDB/EcalCondDB/interface/ODFEDelaysInfo.h"
00008
00009 using namespace std;
00010 using namespace oracle::occi;
00011
00012 ODFEDelaysInfo::ODFEDelaysInfo()
00013 {
00014 m_env = NULL;
00015 m_conn = NULL;
00016 m_writeStmt = NULL;
00017 m_readStmt = NULL;
00018 m_config_tag="";
00019 m_version=0;
00020 m_ID=0;
00021 clear();
00022 }
00023
00024
00025 void ODFEDelaysInfo::clear(){
00026
00027 }
00028
00029
00030
00031 ODFEDelaysInfo::~ODFEDelaysInfo()
00032 {
00033 }
00034
00035
00036
00037 int ODFEDelaysInfo::fetchNextId() throw(std::runtime_error) {
00038
00039 int result=0;
00040 try {
00041 this->checkConnection();
00042
00043 m_readStmt = m_conn->createStatement();
00044 m_readStmt->setSQL("select COND2CONF_INFO_SQ.NextVal from DUAL ");
00045 ResultSet* rset = m_readStmt->executeQuery();
00046 while (rset->next ()){
00047 result= rset->getInt(1);
00048 }
00049 result++;
00050 m_conn->terminateStatement(m_readStmt);
00051 std::cout << " the id is going to be : "<< result<< endl;
00052 return result;
00053
00054 } catch (SQLException &e) {
00055 throw(std::runtime_error("ODFEDelaysInfo::fetchNextId(): "+e.getMessage()));
00056 }
00057
00058 }
00059
00060 void ODFEDelaysInfo::prepareWrite()
00061 throw(std::runtime_error)
00062 {
00063 this->checkConnection();
00064
00065 int next_id=0;
00066 if(getId()==0){
00067 next_id=fetchNextId();
00068 }
00069
00070 try {
00071 m_writeStmt = m_conn->createStatement();
00072 m_writeStmt->setSQL("INSERT INTO "+getTable()+" ( rec_id, tag, version) "
00073 " VALUES ( :1, :2, :3 ) " );
00074
00075 m_writeStmt->setInt(1, next_id);
00076 m_ID=next_id;
00077
00078 } catch (SQLException &e) {
00079 throw(std::runtime_error("ODFEDelaysInfo::prepareWrite(): "+e.getMessage()));
00080 }
00081
00082 }
00083
00084 void ODFEDelaysInfo::setParameters(std::map<string,string> my_keys_map){
00085
00086
00087
00088
00089 for( std::map<std::string, std::string >::iterator ci=
00090 my_keys_map.begin(); ci!=my_keys_map.end(); ci++ ) {
00091
00092 if(ci->first== "VERSION") setVersion(atoi(ci->second.c_str()) );
00093 if(ci->first== "TAG") setConfigTag(ci->second);
00094
00095 }
00096
00097 }
00098
00099 void ODFEDelaysInfo::writeDB()
00100 throw(std::runtime_error)
00101 {
00102 this->checkConnection();
00103 this->checkPrepare();
00104
00105 try {
00106
00107
00108 m_writeStmt->setString(2, this->getConfigTag());
00109 m_writeStmt->setInt(3, this->getVersion());
00110
00111 m_writeStmt->executeUpdate();
00112
00113
00114 } catch (SQLException &e) {
00115 throw(std::runtime_error("ODFEDelaysInfo::writeDB(): "+e.getMessage()));
00116 }
00117
00118
00119 if (!this->fetchID()) {
00120 throw(std::runtime_error("ODFEDelaysInfo::writeDB: Failed to write"));
00121 } else {
00122 int old_version=this->getVersion();
00123 m_readStmt = m_conn->createStatement();
00124 this->fetchData (this);
00125 m_conn->terminateStatement(m_readStmt);
00126 if(this->getVersion()!=old_version) std::cout << "ODFEDelaysInfo>>WARNING version is "<< getVersion()<< endl;
00127 }
00128 }
00129
00130
00131 void ODFEDelaysInfo::fetchData(ODFEDelaysInfo * result)
00132 throw(std::runtime_error)
00133 {
00134
00135 this->checkConnection();
00136
00137 result->clear();
00138 if(result->getId()==0 && (result->getConfigTag()=="") ){
00139 throw(std::runtime_error("ODFEDelaysInfo::fetchData(): no Id defined for this ODFEDelaysInfo "));
00140 }
00141
00142 try {
00143 if(result->getId()!=0) {
00144 m_readStmt->setSQL("SELECT * FROM " + getTable() +
00145 " where rec_id = :1 ");
00146 m_readStmt->setInt(1, result->getId());
00147 } else if (result->getConfigTag()!="") {
00148 m_readStmt->setSQL("SELECT * FROM " + getTable() +
00149 " where tag=:1 AND version=:2 " );
00150 m_readStmt->setString(1, result->getConfigTag());
00151 m_readStmt->setInt(2, result->getVersion());
00152 } else {
00153
00154 throw(std::runtime_error("ODFEDelaysInfo::fetchData(): no Id defined for this ODFEDelaysInfo "));
00155 }
00156
00157 ResultSet* rset = m_readStmt->executeQuery();
00158 rset->next();
00159
00160
00161
00162 result->setId(rset->getInt(1));
00163 result->setConfigTag(rset->getString(2));
00164 result->setVersion(rset->getInt(3));
00165
00166 } catch (SQLException &e) {
00167 throw(std::runtime_error("ODFEDelaysInfo::fetchData(): "+e.getMessage()));
00168 }
00169 }
00170
00171 int ODFEDelaysInfo::fetchID() throw(std::runtime_error)
00172 {
00173
00174 if (m_ID!=0) {
00175 return m_ID;
00176 }
00177
00178 this->checkConnection();
00179
00180 try {
00181 Statement* stmt = m_conn->createStatement();
00182 stmt->setSQL("SELECT rec_id FROM "+ getTable()+
00183 "WHERE tag=:1 and version=:2 " );
00184
00185 stmt->setString(1, getConfigTag() );
00186 stmt->setInt(2, getVersion() );
00187
00188 ResultSet* rset = stmt->executeQuery();
00189
00190 if (rset->next()) {
00191 m_ID = rset->getInt(1);
00192 } else {
00193 m_ID = 0;
00194 }
00195 m_conn->terminateStatement(stmt);
00196 } catch (SQLException &e) {
00197 throw(std::runtime_error("ODFEDelaysInfo::fetchID: "+e.getMessage()));
00198 }
00199
00200 return m_ID;
00201 }