00001 #include <stdexcept>
00002 #include <string>
00003 #include "OnlineDB/Oracle/interface/Oracle.h"
00004
00005 #include "OnlineDB/EcalCondDB/interface/ODWeightsDat.h"
00006
00007 using namespace std;
00008 using namespace oracle::occi;
00009
00010 ODWeightsDat::ODWeightsDat()
00011 {
00012 m_env = NULL;
00013 m_conn = NULL;
00014 m_writeStmt = NULL;
00015 m_readStmt = NULL;
00016
00017 m_sm = 0;
00018 m_fed = 0;
00019 m_tt = 0;
00020 m_xt = 0;
00021
00022 }
00023
00024
00025
00026 ODWeightsDat::~ODWeightsDat()
00027 {
00028 }
00029
00030 void ODWeightsDat::clear() {
00031 m_sm = 0;
00032 m_fed = 0;
00033 m_tt = 0;
00034 m_xt = 0;
00035 m_wei0 = 0;
00036 m_wei1 = 0;
00037 m_wei2 = 0;
00038 m_wei3 = 0;
00039 m_wei4 = 0;
00040 m_wei5 = 0;
00041 }
00042
00043
00044 void ODWeightsDat::prepareWrite()
00045 throw(std::runtime_error)
00046 {
00047 this->checkConnection();
00048
00049 try {
00050 m_writeStmt = m_conn->createStatement();
00051 m_writeStmt->setSQL("INSERT INTO "+getTable()+" (rec_id, sm_id, fed_id, tt_id, cry_id, wei0, wei1, wei2, wei3, wei4, wei5 ) "
00052 "VALUES (:1, :2, :3, :4, :5, :6, :7, :8 , :9, :10, :11 )");
00053 } catch (SQLException &e) {
00054 throw(std::runtime_error("ODWeightsDat::prepareWrite(): "+e.getMessage()));
00055 }
00056 }
00057
00058
00059
00060 void ODWeightsDat::writeDB(const ODWeightsDat* item, ODFEWeightsInfo* iov )
00061 throw(std::runtime_error)
00062 {
00063 this->checkConnection();
00064
00065 try {
00066 m_writeStmt->setInt(1, item->getId());
00067 m_writeStmt->setInt(2, item->getSMId());
00068 m_writeStmt->setInt(3, item->getFedId() );
00069 m_writeStmt->setInt(4, item->getTTId() );
00070 m_writeStmt->setInt(5, item->getCrystalId() );
00071
00072 m_writeStmt->setFloat(6, item->getWeight0() );
00073 m_writeStmt->setFloat(7, item->getWeight1() );
00074 m_writeStmt->setFloat(8, item->getWeight2() );
00075 m_writeStmt->setFloat(9, item->getWeight3() );
00076 m_writeStmt->setFloat(10, item->getWeight4() );
00077 m_writeStmt->setFloat(11, item->getWeight5() );
00078
00079 m_writeStmt->executeUpdate();
00080 } catch (SQLException &e) {
00081 throw(std::runtime_error("ODWeightsDat::writeDB(): "+e.getMessage()));
00082 }
00083 }
00084
00085
00086
00087 void ODWeightsDat::fetchData(std::vector< ODWeightsDat >* p, ODFEWeightsInfo* iov)
00088 throw(std::runtime_error)
00089 {
00090 this->checkConnection();
00091
00092 iov->setConnection(m_env, m_conn);
00093 int iovID = iov->fetchID();
00094 if (!iovID) {
00095 std::cout <<"ID not in the DB"<< endl;
00096 return;
00097 }
00098
00099 try {
00100 m_readStmt->setSQL("SELECT * FROM " + getTable() + " WHERE rec_id = :rec_id order by sm_id, fed_id, tt_id, cry_id");
00101 m_readStmt->setInt(1, iovID);
00102 ResultSet* rset = m_readStmt->executeQuery();
00103
00104
00105 ODWeightsDat dat;
00106 while(rset->next()) {
00107
00108 dat.setSMId( rset->getInt(2) );
00109 dat.setFedId( rset->getInt(3) );
00110 dat.setTTId( rset->getInt(4) );
00111 dat.setCrystalId( rset->getInt(5) );
00112
00113
00114
00115
00116
00117
00118
00119
00120 p->push_back( dat);
00121 for(int iwei = 0; iwei < 6; iwei++) {
00122 dat.setWeight(iwei, rset->getFloat(6 + iwei) );
00123 }
00124 std::vector<float> dccwei( m_wei, m_wei+6);
00125 dccw.push_back(dccwei);
00126
00127 }
00128
00129
00130 } catch (SQLException &e) {
00131 throw(std::runtime_error("ODWeightsDat::fetchData(): "+e.getMessage()));
00132 }
00133 }
00134
00135 void ODWeightsDat::fetchData(ODWeightsDat * p)
00136 throw(std::runtime_error)
00137 {
00138 this->checkConnection();
00139
00140 try {
00141 m_readStmt->setSQL("SELECT * FROM " + getTable() + " WHERE rec_id = :1 order by sm_id, fed_id, tt_id, cry_id");
00142 m_readStmt->setInt(1, p->getId());
00143 ResultSet* rset = m_readStmt->executeQuery();
00144
00145 int row = 0;
00146 while(rset->next()) {
00147 row++;
00148 p->setSMId( rset->getInt(2) );
00149 p->setFedId( rset->getInt(3) );
00150 p->setTTId( rset->getInt(4) );
00151 p->setCrystalId( rset->getInt(5) );
00152 for(int iwei = 0; iwei < 6; iwei++) {
00153 p->setWeight(iwei, rset->getFloat(6 + iwei) );
00154 }
00155 std::vector<float> dccwei( m_wei, m_wei+6);
00156 dccw.push_back(dccwei);
00157 }
00158 std::cout << " table " << getTable() << " total nb of rows " << row << std::endl;
00159
00160 } catch (SQLException &e) {
00161 throw(std::runtime_error("ODWeightsDat::fetchData(): "+e.getMessage()));
00162 }
00163 }
00164
00165
00166
00167 void ODWeightsDat::writeArrayDB(const std::vector< ODWeightsDat > data, ODFEWeightsInfo* iov)
00168 throw(std::runtime_error)
00169 {
00170 this->checkConnection();
00171
00172 int iovID = iov->fetchID();
00173 if (!iovID) { throw(std::runtime_error("ODDelays::writeArrayDB: ODFEDelaysInfo not in DB")); }
00174
00175
00176 int nrows=data.size();
00177 int* ids= new int[nrows];
00178 int* xx= new int[nrows];
00179 int* yy= new int[nrows];
00180 int* zz= new int[nrows];
00181 int* st= new int[nrows];
00182 float* xx1= new float[nrows];
00183 float* yy1= new float[nrows];
00184 float* zz1= new float[nrows];
00185 float* xx2= new float[nrows];
00186 float* yy2= new float[nrows];
00187 float* zz2= new float[nrows];
00188
00189
00190 ub2* ids_len= new ub2[nrows];
00191 ub2* x_len= new ub2[nrows];
00192 ub2* y_len= new ub2[nrows];
00193 ub2* z_len= new ub2[nrows];
00194 ub2* st_len= new ub2[nrows];
00195 ub2* x1_len= new ub2[nrows];
00196 ub2* y1_len= new ub2[nrows];
00197 ub2* z1_len= new ub2[nrows];
00198 ub2* x2_len= new ub2[nrows];
00199 ub2* y2_len= new ub2[nrows];
00200 ub2* z2_len= new ub2[nrows];
00201
00202 ODWeightsDat dataitem;
00203
00204 int n_data= (int) data.size();
00205 for (int count = 0; count <n_data ; count++) {
00206 dataitem=data[count];
00207 ids[count]=iovID;
00208 xx[count]=dataitem.getSMId();
00209 yy[count]=dataitem.getFedId();
00210 zz[count]=dataitem.getTTId();
00211 st[count]=dataitem.getCrystalId();
00212 xx1[count]=dataitem.getWeight0();
00213 yy1[count]=dataitem.getWeight1();
00214 zz1[count]=dataitem.getWeight2();
00215 xx2[count]=dataitem.getWeight3();
00216 yy2[count]=dataitem.getWeight4();
00217 zz2[count]=dataitem.getWeight5();
00218
00219
00220 ids_len[count]=sizeof(ids[count]);
00221 x_len[count]=sizeof(xx[count]);
00222 y_len[count]=sizeof(yy[count]);
00223 z_len[count]=sizeof(zz[count]);
00224 st_len[count]=sizeof(st[count]);
00225 x1_len[count]=sizeof(xx1[count]);
00226 y1_len[count]=sizeof(yy1[count]);
00227 z1_len[count]=sizeof(zz1[count]);
00228 x2_len[count]=sizeof(xx2[count]);
00229 y2_len[count]=sizeof(yy2[count]);
00230 z2_len[count]=sizeof(zz2[count]);
00231
00232 }
00233
00234
00235 try {
00236 m_writeStmt->setDataBuffer(1, (dvoid*)ids, OCCIINT, sizeof(ids[0]),ids_len);
00237 m_writeStmt->setDataBuffer(2, (dvoid*)xx, OCCIINT , sizeof(xx[0]), x_len );
00238 m_writeStmt->setDataBuffer(3, (dvoid*)yy, OCCIINT , sizeof(yy[0]), y_len );
00239 m_writeStmt->setDataBuffer(4, (dvoid*)zz, OCCIINT , sizeof(zz[0]), z_len );
00240 m_writeStmt->setDataBuffer(5, (dvoid*)st, OCCIINT , sizeof(st[0]), st_len );
00241 m_writeStmt->setDataBuffer(6, (dvoid*)xx1, OCCIFLOAT , sizeof(xx1[0]), x1_len );
00242 m_writeStmt->setDataBuffer(7, (dvoid*)yy1, OCCIFLOAT , sizeof(yy1[0]), y1_len );
00243 m_writeStmt->setDataBuffer(8, (dvoid*)zz1, OCCIFLOAT , sizeof(zz1[0]), z1_len );
00244 m_writeStmt->setDataBuffer(9, (dvoid*)xx2, OCCIFLOAT , sizeof(xx2[0]), x2_len );
00245 m_writeStmt->setDataBuffer(10, (dvoid*)yy2, OCCIFLOAT , sizeof(yy2[0]), y2_len );
00246 m_writeStmt->setDataBuffer(11, (dvoid*)zz2, OCCIFLOAT , sizeof(zz2[0]), z2_len );
00247
00248
00249 m_writeStmt->executeArrayUpdate(nrows);
00250
00251 delete [] ids;
00252 delete [] xx;
00253 delete [] yy;
00254 delete [] zz;
00255 delete [] st;
00256 delete [] xx1;
00257 delete [] yy1;
00258 delete [] zz1;
00259 delete [] xx2;
00260 delete [] yy2;
00261 delete [] zz2;
00262
00263 delete [] ids_len;
00264 delete [] x_len;
00265 delete [] y_len;
00266 delete [] z_len;
00267 delete [] st_len;
00268 delete [] x1_len;
00269 delete [] y1_len;
00270 delete [] z1_len;
00271 delete [] x2_len;
00272 delete [] y2_len;
00273 delete [] z2_len;
00274
00275 } catch (SQLException &e) {
00276 throw(std::runtime_error("ODWeightsDat::writeArrayDB(): "+e.getMessage()));
00277 }
00278 }