00001 #include <stdexcept>
00002 #include <string>
00003 #include "OnlineDB/Oracle/interface/Oracle.h"
00004
00005 #include "OnlineDB/EcalCondDB/interface/MODDCCDetailsDat.h"
00006 #include "OnlineDB/EcalCondDB/interface/MODRunIOV.h"
00007
00008 using namespace std;
00009 using namespace oracle::occi;
00010
00011 MODDCCDetailsDat::MODDCCDetailsDat()
00012 {
00013 m_env = NULL;
00014 m_conn = NULL;
00015 m_writeStmt = NULL;
00016 m_readStmt = NULL;
00017
00018 m_qpll=0;
00019 m_opto=0;
00020 m_tout=0;
00021 m_head=0;
00022 m_evnu=0;
00023 m_bxnu=0;
00024 m_evpa=0;
00025 m_odpa=0;
00026 m_blsi=0;
00027 m_alff=0;
00028 m_fuff=0;
00029 m_fusu=0;
00030
00031 }
00032
00033
00034
00035 MODDCCDetailsDat::~MODDCCDetailsDat()
00036 {
00037 }
00038
00039
00040
00041 void MODDCCDetailsDat::prepareWrite()
00042 throw(std::runtime_error)
00043 {
00044 this->checkConnection();
00045
00046 try {
00047 m_writeStmt = m_conn->createStatement();
00048 m_writeStmt->setSQL(" INSERT INTO "+getTable()+" (iov_id, logic_id, "
00049 " qpll_error, optical_link, data_timeout, dcc_header, event_number, bx_number, "
00050 " even_parity, odd_parity, block_size, almost_full_fifo, full_fifo, "
00051 " forced_full_supp ) "
00052 " VALUES (:iov_id, :logic_id, "
00053 " :1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12 ) ");
00054 } catch (SQLException &e) {
00055 throw(std::runtime_error("MODDCCDetailsDat::prepareWrite(): "+e.getMessage()));
00056 }
00057 }
00058
00059
00060
00061 void MODDCCDetailsDat::writeDB(const EcalLogicID* ecid, const MODDCCDetailsDat* item, MODRunIOV* iov )
00062 throw(std::runtime_error)
00063 {
00064 this->checkConnection();
00065 this->checkPrepare();
00066
00067 int iovID = iov->fetchID();
00068 if (!iovID) { throw(std::runtime_error("MODDCCDetailsDat::writeDB: IOV not in DB")); }
00069
00070 int logicID = ecid->getLogicID();
00071 if (!logicID) { throw(std::runtime_error("MODDCCDetailsDat::writeDB: Bad EcalLogicID")); }
00072
00073 try {
00074 m_writeStmt->setInt(1, iovID);
00075 m_writeStmt->setInt(2, logicID);
00076 m_writeStmt->setInt(3, item->getQPLL() );
00077 m_writeStmt->setInt(4, item->getOpticalLink() );
00078 m_writeStmt->setInt(5, item->getDataTimeout() );
00079 m_writeStmt->setInt(6, item->getHeader() );
00080 m_writeStmt->setInt(7, item->getEventNumber() );
00081 m_writeStmt->setInt(8, item->getBXNumber() );
00082 m_writeStmt->setInt(9, item->getEvenParity() );
00083 m_writeStmt->setInt(10, item->getOddParity() );
00084 m_writeStmt->setInt(11, item->getBlockSize() );
00085 m_writeStmt->setInt(12, item->getAlmostFullFIFO() );
00086 m_writeStmt->setInt(13, item->getFullFIFO() );
00087 m_writeStmt->setInt(14, item->getForcedFullSupp() );
00088
00089 m_writeStmt->executeUpdate();
00090 } catch (SQLException &e) {
00091 throw(std::runtime_error("MODDCCDetailsDat::writeDB(): "+e.getMessage()));
00092 }
00093 }
00094
00095
00096
00097 void MODDCCDetailsDat::fetchData(std::map< EcalLogicID, MODDCCDetailsDat >* fillMap, MODRunIOV* iov)
00098 throw(std::runtime_error)
00099 {
00100 this->checkConnection();
00101 fillMap->clear();
00102
00103 iov->setConnection(m_env, m_conn);
00104 int iovID = iov->fetchID();
00105 if (!iovID) {
00106
00107 return;
00108 }
00109
00110 try {
00111
00112 m_readStmt->setSQL("SELECT cv.name, cv.logic_id, cv.id1, cv.id2, cv.id3, cv.maps_to, "
00113 " d.qpll_error, d.optical_link, d.data_timeout, d.dcc_header, d.event_number, d.bx_number, d.even_parity, d.odd_parity, d.block_size, d.almost_full_fifo, d.full_fifo, d.forced_full_supp "
00114 "FROM channelview cv JOIN "+getTable()+" d "
00115 "ON cv.logic_id = d.logic_id AND cv.name = cv.maps_to "
00116 "WHERE d.iov_id = :iov_id");
00117 m_readStmt->setInt(1, iovID);
00118 ResultSet* rset = m_readStmt->executeQuery();
00119
00120 std::pair< EcalLogicID, MODDCCDetailsDat > p;
00121 MODDCCDetailsDat dat;
00122 while(rset->next()) {
00123 p.first = EcalLogicID( rset->getString(1),
00124 rset->getInt(2),
00125 rset->getInt(3),
00126 rset->getInt(4),
00127 rset->getInt(5),
00128 rset->getString(6));
00129
00130 dat.setQPLL( rset->getInt(7) );
00131 dat.setOpticalLink( rset->getInt(8) );
00132 dat.setDataTimeout( rset->getInt(9) );
00133 dat.setHeader( rset->getInt(10) );
00134 dat.setEventNumber( rset->getInt(11) );
00135 dat.setBXNumber( rset->getInt(12) );
00136 dat.setEvenParity( rset->getInt(13) );
00137 dat.setOddParity( rset->getInt(14) );
00138 dat.setBlockSize( rset->getInt(15) );
00139 dat.setAlmostFullFIFO( rset->getInt(16) );
00140 dat.setFullFIFO( rset->getInt(17) );
00141 dat.setForcedFullSupp( rset->getInt(18) );
00142
00143 p.second = dat;
00144 fillMap->insert(p);
00145 }
00146 } catch (SQLException &e) {
00147 throw(std::runtime_error("MODDCCDetailsDat::fetchData(): "+e.getMessage()));
00148 }
00149 }
00150
00151 void MODDCCDetailsDat::writeArrayDB(const std::map< EcalLogicID, MODDCCDetailsDat >* data, MODRunIOV* iov)
00152 throw(std::runtime_error)
00153 {
00154 this->checkConnection();
00155 this->checkPrepare();
00156
00157 int iovID = iov->fetchID();
00158 if (!iovID) { throw(std::runtime_error("MODDCCDetailsDat::writeArrayDB: IOV not in DB")); }
00159
00160
00161 int nrows=data->size();
00162 int* ids= new int[nrows];
00163 int* iovid_vec= new int[nrows];
00164 int* xx1= new int[nrows];
00165 int* xx2= new int[nrows];
00166 int* xx3= new int[nrows];
00167 int* xx4= new int[nrows];
00168 int* xx5= new int[nrows];
00169 int* xx6= new int[nrows];
00170 int* xx7= new int[nrows];
00171 int* xx8= new int[nrows];
00172 int* xx9= new int[nrows];
00173 int* xx10= new int[nrows];
00174 int* xx11= new int[nrows];
00175 int* xx12= new int[nrows];
00176
00177 ub2* ids_len= new ub2[nrows];
00178 ub2* iov_len= new ub2[nrows];
00179 ub2* x1_len= new ub2[nrows];
00180 ub2* x2_len= new ub2[nrows];
00181 ub2* x3_len= new ub2[nrows];
00182 ub2* x4_len= new ub2[nrows];
00183 ub2* x5_len= new ub2[nrows];
00184 ub2* x6_len= new ub2[nrows];
00185 ub2* x7_len= new ub2[nrows];
00186 ub2* x8_len= new ub2[nrows];
00187 ub2* x9_len= new ub2[nrows];
00188 ub2* x10_len= new ub2[nrows];
00189 ub2* x11_len= new ub2[nrows];
00190 ub2* x12_len= new ub2[nrows];
00191
00192 const EcalLogicID* channel;
00193 const MODDCCDetailsDat* dataitem;
00194 int count=0;
00195 typedef map< EcalLogicID, MODDCCDetailsDat >::const_iterator CI;
00196 for (CI p = data->begin(); p != data->end(); ++p) {
00197 channel = &(p->first);
00198 int logicID = channel->getLogicID();
00199 if (!logicID) { throw(std::runtime_error("MODDCCDetailsDat::writeArrayDB: Bad EcalLogicID")); }
00200 ids[count]=logicID;
00201 iovid_vec[count]=iovID;
00202
00203 dataitem = &(p->second);
00204
00205 int x1= dataitem->getQPLL();
00206 int x2= dataitem->getOpticalLink();
00207 int x3= dataitem->getDataTimeout();
00208 int x4= dataitem->getHeader();
00209 int x5= dataitem->getEventNumber();
00210 int x6= dataitem->getBXNumber();
00211 int x7= dataitem->getEvenParity();
00212 int x8= dataitem->getOddParity();
00213 int x9= dataitem->getBlockSize();
00214 int x10=dataitem->getAlmostFullFIFO();
00215 int x11=dataitem->getFullFIFO();
00216 int x12=dataitem->getForcedFullSupp();
00217
00218 xx1[count]=x1;
00219 xx2[count]=x2;
00220 xx3[count]=x3;
00221 xx4[count]=x4;
00222 xx5[count]=x5;
00223 xx6[count]=x6;
00224 xx7[count]=x7;
00225 xx8[count]=x8;
00226 xx9[count]=x9;
00227 xx10[count]=x10;
00228 xx11[count]=x11;
00229 xx12[count]=x12;
00230
00231
00232 ids_len[count]=sizeof(ids[count]);
00233 iov_len[count]=sizeof(iovid_vec[count]);
00234
00235 x1_len[count]=sizeof(xx1[count]);
00236 x2_len[count]=sizeof(xx2[count]);
00237 x3_len[count]=sizeof(xx3[count]);
00238 x4_len[count]=sizeof(xx4[count]);
00239 x5_len[count]=sizeof(xx5[count]);
00240 x6_len[count]=sizeof(xx6[count]);
00241 x7_len[count]=sizeof(xx7[count]);
00242 x8_len[count]=sizeof(xx8[count]);
00243 x9_len[count]=sizeof(xx9[count]);
00244 x10_len[count]=sizeof(xx10[count]);
00245 x11_len[count]=sizeof(xx11[count]);
00246 x12_len[count]=sizeof(xx12[count]);
00247
00248 count++;
00249 }
00250
00251
00252 try {
00253 m_writeStmt->setDataBuffer(1, (dvoid*)iovid_vec, OCCIINT, sizeof(iovid_vec[0]),iov_len);
00254 m_writeStmt->setDataBuffer(2, (dvoid*)ids, OCCIINT, sizeof(ids[0]), ids_len );
00255 m_writeStmt->setDataBuffer(3, (dvoid*)xx1, OCCIINT , sizeof(xx1[0]), x1_len );
00256 m_writeStmt->setDataBuffer(4, (dvoid*)xx2, OCCIINT , sizeof(xx2[0]), x2_len );
00257 m_writeStmt->setDataBuffer(5, (dvoid*)xx3, OCCIINT , sizeof(xx3[0]), x3_len );
00258 m_writeStmt->setDataBuffer(6, (dvoid*)xx4, OCCIINT , sizeof(xx4[0]), x4_len );
00259 m_writeStmt->setDataBuffer(7, (dvoid*)xx5, OCCIINT , sizeof(xx5[0]), x5_len );
00260 m_writeStmt->setDataBuffer(8, (dvoid*)xx6, OCCIINT , sizeof(xx6[0]), x6_len );
00261 m_writeStmt->setDataBuffer(9, (dvoid*)xx7, OCCIINT , sizeof(xx7[0]), x7_len );
00262 m_writeStmt->setDataBuffer(10, (dvoid*)xx8, OCCIINT , sizeof(xx8[0]), x8_len );
00263 m_writeStmt->setDataBuffer(11, (dvoid*)xx9, OCCIINT , sizeof(xx9[0]), x9_len );
00264 m_writeStmt->setDataBuffer(12, (dvoid*)xx10, OCCIINT , sizeof(xx10[0]), x10_len );
00265 m_writeStmt->setDataBuffer(13, (dvoid*)xx11, OCCIINT , sizeof(xx11[0]), x11_len );
00266 m_writeStmt->setDataBuffer(14, (dvoid*)xx12, OCCIINT , sizeof(xx12[0]), x12_len );
00267
00268 m_writeStmt->executeArrayUpdate(nrows);
00269
00270 delete [] ids;
00271 delete [] iovid_vec;
00272 delete [] xx1;
00273 delete [] xx2;
00274 delete [] xx3;
00275 delete [] xx4;
00276 delete [] xx5;
00277 delete [] xx6;
00278 delete [] xx7;
00279 delete [] xx8;
00280 delete [] xx9;
00281 delete [] xx10;
00282 delete [] xx11;
00283 delete [] xx12;
00284
00285
00286 delete [] ids_len;
00287 delete [] iov_len;
00288 delete [] x1_len;
00289 delete [] x2_len;
00290 delete [] x3_len;
00291 delete [] x4_len;
00292 delete [] x5_len;
00293 delete [] x6_len;
00294 delete [] x7_len;
00295 delete [] x8_len;
00296 delete [] x9_len;
00297 delete [] x10_len;
00298 delete [] x11_len;
00299 delete [] x12_len;
00300
00301
00302 } catch (SQLException &e) {
00303 throw(std::runtime_error("MonPedestalsDat::writeArrayDB(): "+e.getMessage()));
00304 }
00305 }