Go to the documentation of this file.00001 #include <stdexcept>
00002 #include <string>
00003 #include <cstdlib>
00004
00005 #include "OnlineDB/Oracle/interface/Oracle.h"
00006
00007 #include "OnlineDB/EcalCondDB/interface/ODTTCFConfig.h"
00008
00009 using namespace std;
00010 using namespace oracle::occi;
00011
00012 ODTTCFConfig::ODTTCFConfig()
00013 {
00014 m_env = NULL;
00015 m_conn = NULL;
00016 m_writeStmt = NULL;
00017 m_readStmt = NULL;
00018 m_config_tag="";
00019 m_ID=0;
00020 clear();
00021 m_size=0;
00022 }
00023
00024
00025 void ODTTCFConfig::clear(){
00026
00027 }
00028
00029
00030 ODTTCFConfig::~ODTTCFConfig()
00031 {
00032 }
00033
00034 int ODTTCFConfig::fetchNextId() throw(std::runtime_error) {
00035
00036 int result=0;
00037 try {
00038 this->checkConnection();
00039 std::cout<< "going to fetch new id for TTCF 1"<<endl;
00040 m_readStmt = m_conn->createStatement();
00041 m_readStmt->setSQL("select ecal_ttcf_config_sq.NextVal from dual");
00042 ResultSet* rset = m_readStmt->executeQuery();
00043 while (rset->next ()){
00044 result= rset->getInt(1);
00045 }
00046 std::cout<< "id is : "<< result<<endl;
00047
00048 m_conn->terminateStatement(m_readStmt);
00049 return result;
00050
00051 } catch (SQLException &e) {
00052 throw(std::runtime_error("ODTTCFConfig::fetchNextId(): "+e.getMessage()));
00053 }
00054
00055 }
00056
00057
00058
00059
00060 void ODTTCFConfig::prepareWrite()
00061 throw(std::runtime_error)
00062 {
00063 this->checkConnection();
00064 int next_id=fetchNextId();
00065
00066 try {
00067 m_writeStmt = m_conn->createStatement();
00068 m_writeStmt->setSQL("INSERT INTO ECAL_TTCF_CONFIGURATION (ttcf_configuration_id, ttcf_tag, "
00069 " rxbc0_delay, reg_30 , ttcf_configuration_file , ttcf_configuration ) "
00070 "VALUES (:1, :2, :3 , :4, :5, :6)");
00071 m_writeStmt->setInt(1, next_id);
00072 m_writeStmt->setString(2, getConfigTag());
00073
00074 m_writeStmt->setInt( 3, getRxBC0Delay() );
00075 m_writeStmt->setInt( 4, getReg30() );
00076
00077 m_writeStmt->setString(5, getTTCFConfigurationFile());
00078
00079 oracle::occi::Clob clob(m_conn);
00080 clob.setEmpty();
00081 m_writeStmt->setClob(6,clob);
00082 m_writeStmt->executeUpdate ();
00083 m_ID=next_id;
00084
00085 m_conn->terminateStatement(m_writeStmt);
00086 std::cout<<"inserted into CONFIGURATION with id="<<next_id<<std::endl;
00087
00088
00089 m_writeStmt = m_conn->createStatement();
00090 m_writeStmt->setSQL ("SELECT ttcf_configuration FROM ECAL_TTCF_CONFIGURATION WHERE"
00091 " ttcf_configuration_id=:1 FOR UPDATE");
00092
00093 std::cout<<"updating the clob 0"<<std::endl;
00094
00095
00096 } catch (SQLException &e) {
00097 throw(std::runtime_error("ODTTCFConfig::prepareWrite(): "+e.getMessage()));
00098 }
00099
00100 std::cout<<"updating the clob 1 "<<std::endl;
00101
00102 }
00103
00104 void ODTTCFConfig::writeDB()
00105 throw(std::runtime_error)
00106 {
00107
00108 std::cout<<"updating the clob 2"<<std::endl;
00109
00110 try {
00111 m_writeStmt->setInt(1, m_ID);
00112 ResultSet* rset = m_writeStmt->executeQuery();
00113
00114 rset->next ();
00115
00116 oracle::occi::Clob clob = rset->getClob (1);
00117 cout << "Opening the clob in read write mode" << endl;
00118 populateClob (clob, getTTCFConfigurationFile(), m_size);
00119 int clobLength=clob.length ();
00120 cout << "Length of the clob is: " << clobLength << endl;
00121
00122 m_writeStmt->executeUpdate();
00123 m_writeStmt->closeResultSet (rset);
00124
00125 } catch (SQLException &e) {
00126 throw(std::runtime_error("ODTTCFConfig::writeDB(): "+e.getMessage()));
00127 }
00128
00129 if (!this->fetchID()) {
00130 throw(std::runtime_error("ODTTCFConfig::writeDB: Failed to write"));
00131 }
00132
00133
00134 }
00135
00136
00137
00138
00139 void ODTTCFConfig::fetchData(ODTTCFConfig * result)
00140 throw(std::runtime_error)
00141 {
00142 this->checkConnection();
00143 result->clear();
00144
00145 if(result->getId()==0 && (result->getConfigTag()=="") ){
00146 throw(std::runtime_error("ODTTCFConfig::fetchData(): no Id defined for this ODTTCFConfig "));
00147 }
00148
00149 try {
00150
00151 m_readStmt->setSQL("SELECT * "
00152 "FROM ECAL_TTCF_CONFIGURATION "
00153 " where (ttcf_configuration_id = :1 or ttcf_tag= :2) " );
00154 m_readStmt->setInt(1, result->getId());
00155 m_readStmt->setString(2, result->getConfigTag());
00156 ResultSet* rset = m_readStmt->executeQuery();
00157
00158 rset->next();
00159
00160 result->setId(rset->getInt(1));
00161 result->setConfigTag(rset->getString(2));
00162 result->setTTCFConfigurationFile(rset->getString(3));
00163 Clob clob = rset->getClob (4);
00164 cout << "Opening the clob in Read only mode" << endl;
00165 clob.open (OCCI_LOB_READONLY);
00166 int clobLength=clob.length ();
00167 cout << "Length of the clob is: " << clobLength << endl;
00168 m_size=clobLength;
00169 unsigned char* buffer = readClob (clob, m_size);
00170 clob.close ();
00171 result->setTTCFClob((unsigned char*) buffer );
00172
00173 } catch (SQLException &e) {
00174 throw(std::runtime_error("ODTTCFConfig::fetchData(): "+e.getMessage()));
00175 }
00176 }
00177
00178
00179
00180 int ODTTCFConfig::fetchID() throw(std::runtime_error)
00181 {
00182 if (m_ID!=0) {
00183 return m_ID;
00184 }
00185
00186 this->checkConnection();
00187
00188 try {
00189 Statement* stmt = m_conn->createStatement();
00190 stmt->setSQL("SELECT ttcf_configuration_id FROM ecal_ttcf_configuration "
00191 "WHERE ttcf_tag=:ttcf_tag "
00192 );
00193
00194 stmt->setString(1, getConfigTag() );
00195
00196 ResultSet* rset = stmt->executeQuery();
00197
00198 if (rset->next()) {
00199 m_ID = rset->getInt(1);
00200 } else {
00201 m_ID = 0;
00202 }
00203 m_conn->terminateStatement(stmt);
00204 } catch (SQLException &e) {
00205 throw(std::runtime_error("ODTTCFConfig::fetchID: "+e.getMessage()));
00206 }
00207
00208 return m_ID;
00209 }
00210
00211 void ODTTCFConfig::setParameters(std::map<string,string> my_keys_map){
00212
00213
00214
00215
00216 for( std::map<std::string, std::string >::iterator ci=
00217 my_keys_map.begin(); ci!=my_keys_map.end(); ci++ ) {
00218
00219 if(ci->first== "TTCF_CONFIGURATION_ID") setConfigTag(ci->second);
00220 if(ci->first== "Configuration") {
00221 std::string fname=ci->second ;
00222 string str3;
00223 size_t pos, pose;
00224
00225 pos = fname.find("=");
00226 pose = fname.size();
00227 str3 = fname.substr (pos+1, pose-pos-2);
00228
00229 cout << "fname="<<fname<< " and reduced is: "<<str3 << endl;
00230 setTTCFConfigurationFile(str3 );
00231
00232
00233
00234 std::cout << "Going to read file: " << str3 << endl;
00235
00236 ifstream inpFile;
00237 inpFile.open(str3.c_str());
00238
00239
00240 int bufsize = 0;
00241 inpFile.seekg( 0,ios::end );
00242 bufsize = inpFile.tellg();
00243 std::cout <<" bufsize ="<<bufsize<< std::endl;
00244
00245 inpFile.seekg( 0,ios::beg );
00246
00247 inpFile.close();
00248 m_size=bufsize;
00249
00250 } else if ( ci->first == "RXBC0_DELAY" ) {
00251 setRxBC0Delay( atoi( ci->second.c_str() ) );
00252 } else if ( ci->first == "REG_30" ) {
00253 setReg30( atoi( ci->second.c_str() ) );
00254 }
00255 }
00256
00257 }
00258