CMS 3D CMS Logo

Public Member Functions | Private Attributes

condbon Class Reference

#include <CSCOnlineDB.h>

List of all members.

Public Member Functions

void cdbon_last_record (std::string obj_name, int *record)
void cdbon_read_rec (std::string obj_name, int record, CSCobject *obj)
void cdbon_write (CSCobject *obj, std::string obj_name, int record, int global_run, std::string time)
 condbon () throw (oracle::occi::SQLException)
 ~condbon () throw (oracle::occi::SQLException)

Private Attributes

oracle::occi::Connection * con
oracle::occi::Environment * env
oracle::occi::Statement * stmt
oracle::occi::Statement * stmt1

Detailed Description

Definition at line 17 of file CSCOnlineDB.h.


Constructor & Destructor Documentation

condbon::condbon ( ) throw (oracle::occi::SQLException)

Constructor for condbon

Definition at line 6 of file CSCOnlineDB.cc.

References con, gather_cfg::cout, and env.

  {
    std::string db_user;
    std::string db_pass;
    env = oracle::occi::Environment::createEnvironment (oracle::occi::Environment::OBJECT);
    char* c_user = ::getenv("CONDBON_AUTH_USER");
    char* c_pass = ::getenv("CONDBON_AUTH_PASSWORD");
    db_user=std::string(c_user);
    db_pass=std::string(c_pass);
    con = env->createConnection (db_user,db_pass,"omds");
    std::cout << "Connection to Online DB is done." << std::endl;
  }// end of constructor condbon ()
condbon::~condbon ( ) throw (oracle::occi::SQLException)

Destructor for condbon

Destructor for condbon.

Definition at line 21 of file CSCOnlineDB.cc.

References con, and env.

  {
    env->terminateConnection (con);
    oracle::occi::Environment::terminateEnvironment (env);
  }  // end of ~condbon ()

Member Function Documentation

void condbon::cdbon_last_record ( std::string  obj_name,
int *  record 
)

Definition at line 230 of file CSCOnlineDB.cc.

References con, and stmt.

{
  std::string sqlStmt;
  sqlStmt = "SELECT max(record_id) from "+obj_name;
  stmt=con->createStatement ();
  stmt->setSQL(sqlStmt);
  oracle::occi::ResultSet *rset;
  rset = stmt->executeQuery ();
  //try{
    while (rset->next ())
    {*record = rset->getInt (1);}
    //     }catch(oracle::occi::SQLException ex)
    //{
    // std::cout<<"Exception thrown: "<<std::endl;
    // std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
    // std::cout<<ex.getMessage() << std::endl;
    //}
  con->terminateStatement (stmt);
} // end of cdbon_last_record
void condbon::cdbon_read_rec ( std::string  obj_name,
int  record,
CSCobject obj 
)

Definition at line 250 of file CSCOnlineDB.cc.

References con, i, CSCobject::obj, AlCaHLTBitMon_ParallelJobs::p, record, stmt, and stmt1.

{
  int i,len;
  int map_id=0, map_index=0, layer_id=0;
  std::string tab, tab_map, tab_data;
  tab=obj_name;
  tab_map=obj_name+"_map";
  tab_data=obj_name+"_data";
  int num_var =0;
  int vec_index;

  std::string sqlStmt,sqlStmt1;
  stmt=con->createStatement ();
  stmt1=con->createStatement ();
  oracle::occi::ResultSet *rset, *rset1;
  std::ostringstream ss;

  char d;
  const char* p=tab_data.c_str();
  len=tab_data.length();
  for(i=0;i<len;++i){
   d=toupper(*(p+i));
   ss<<d;
  }
  sqlStmt = "SELECT count(column_name) from user_tab_columns where table_name='"+ss.str()+"'";
  ss.str(""); // clear
  stmt->setSQL(sqlStmt);
  rset = stmt->executeQuery ();
  //  try{
    while (rset->next ())
    {num_var= rset->getInt(1) - 2;}
    //     }catch(oracle::occi::SQLException ex)
    //{
    // std::cout<<"Exception thrown: "<<std::endl;
    // std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
    // std::cout<<ex.getMessage() << std::endl;
    //}
  stmt->closeResultSet (rset);

  ss<<record;

sqlStmt = "SELECT map_id,map_index,layer_id from "+tab_map+" where record_id="+ss.str()+" order by map_index";
  ss.str(""); // clear
  stmt->setSQL(sqlStmt);
  rset = stmt->executeQuery ();
  //  try{
    while (rset->next ())
    {map_id = rset->getInt (1);
     map_index = rset->getInt (2);
     layer_id = rset->getInt (3);
     ss<<map_id;
     sqlStmt1 = "SELECT * from "+tab_data+" where map_id="+ss.str()+" order by vec_index";
     ss.str(""); // clear
     stmt1->setSQL(sqlStmt1);
     rset1 = stmt1->executeQuery ();
     //     try{
       while (rset1->next ())
       {vec_index = rset1->getInt (2);
               obj->obj[layer_id].resize(vec_index);
        for(i=0;i<num_var;++i){
         obj->obj[layer_id][vec_index-1].push_back(rset1->getFloat(3+i));
                              }
       }
       //   }catch(oracle::occi::SQLException ex)
       //{
       // std::cout<<"Exception thrown: "<<std::endl;
       // std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
       // std::cout<<ex.getMessage() << std::endl;
       //}
    }
    // }catch(oracle::occi::SQLException ex)
    //{
    // std::cout<<"Exception thrown: "<<std::endl;
    // std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
    // std::cout<<ex.getMessage() << std::endl;
    //}
} // end of cdbon_read_rec
void condbon::cdbon_write ( CSCobject obj,
std::string  obj_name,
int  record,
int  global_run,
std::string  time 
)

Definition at line 27 of file CSCOnlineDB.cc.

References trackerHits::c, alignmentValidation::c1, con, gather_cfg::cout, env, cmsRelvalreport::exit, i, j, gen::k, min, LaserDQM_cfi::mon, cmsPerfSuiteHarvest::now, CSCobject::obj, record, stmt, stmt1, and cond::rpcobgas::time.

{
  int i,j,k;
  std::string tab, tab_map, tab_data;
  std::string sqlStmt, sqlStmt1;
  int rec_id =0, map_id =0, map_index =0;
  tm curtime;
  time_t now;

  tab=obj_name;
  tab_map=obj_name+"_map";
  tab_data=obj_name+"_data";
  if(obj_name=="test"){
   tab="gains";
   tab_map="gains_map";
   tab_data="gains_data";
  }
  stmt = con->createStatement ();

  oracle::occi::ResultSet *rset;

  sqlStmt = "SELECT max(record_id) from "+tab;
  stmt->setSQL(sqlStmt);
  rset = stmt->executeQuery ();
  //  try{
    while (rset->next ())
    {rec_id= rset->getInt (1);}
    //     }catch(oracle::occi::SQLException ex)
    //    {
    // std::cout<<"Exception thrown: "<<std::endl;
    // std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
    // std::cout<<ex.getMessage() << std::endl;
    //}
  stmt->closeResultSet (rset);

  if(record>rec_id){
   sqlStmt = "INSERT INTO "+tab+" VALUES (:1, :2, :3, :4, :5, null)";
   stmt->setSQL(sqlStmt);
   time(&now);
   curtime=*localtime(&now);
   try{
   stmt->setInt (1, record);
   stmt->setInt (2, global_run);
   stmt->setInt (5, 0);
/* For time as "05/17/2006 16:30:07"
  std::string st=data_time.substr(0,2);
  int mon=atoi(st.c_str());
  st=data_time.substr(3,2);
  int mday=atoi(st.c_str());
  st=data_time.substr(6,4);
  int year=atoi(st.c_str());
  st=data_time.substr(11,2);
  int hour=atoi(st.c_str());
  st=data_time.substr(14,2);
  int min=atoi(st.c_str());
  st=data_time.substr(17,2);
  int sec=atoi(st.c_str());
*/
/* For time of format "Mon May 29 10:28:58 2006" */
   std::map <std::string, int> month;
   month["Jan"]=1; month["Feb"]=2; month["Mar"]=3; month["Apr"]=4;
   month["May"]=5; month["Jun"]=6; month["Jul"]=7; month["Aug"]=8;
   month["Sep"]=9; month["Oct"]=10; month["Nov"]=11; month["Dec"]=12;
   std::string st=data_time.substr(4,3);
   int mon=month[st];
   st=data_time.substr(8,2);
   int mday=atoi(st.c_str());
   st=data_time.substr(20,4);
   int year=atoi(st.c_str());
   st=data_time.substr(11,2);
   int hour=atoi(st.c_str());
   st=data_time.substr(14,2);
   int min=atoi(st.c_str());
   st=data_time.substr(17,2);
   int sec=atoi(st.c_str());
   oracle::occi::Date edate(env, year, mon, mday, hour, min, sec);
   stmt->setDate(3, edate);
   oracle::occi::Date edate_c(env, curtime.tm_year+1900, curtime.tm_mon+1, curtime.tm_mday,
   curtime.tm_hour, curtime.tm_min, curtime.tm_sec);
   stmt->setDate(4, edate_c);
   if(obj_name!="test") stmt->executeUpdate ();
   }catch(oracle::occi::SQLException ex)
   {
    std::cout<<"Exception thrown for insertBind"<<std::endl;
    std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
    std::cout<<ex.getMessage() << std::endl;
   }
  }

  sqlStmt = "SELECT max(map_id) from "+tab_map;
  stmt->setSQL(sqlStmt);
  rset = stmt->executeQuery ();
  //  try{
    while (rset->next ())
    {map_id= rset->getInt (1);}
    //     }catch(oracle::occi::SQLException ex)
    //{
    // std::cout<<"Exception thrown: "<<std::endl;
    // std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
    // std::cout<<ex.getMessage() << std::endl;
    //}
  stmt->closeResultSet (rset);

  std::ostringstream ss;
  ss<<record;

  sqlStmt = "SELECT max(map_index) from "+tab_map+" where record_id="+ss.str();
  ss.str(""); // clear
  stmt->setSQL(sqlStmt);
  rset = stmt->executeQuery ();
  //  try{
    while (rset->next ())
    {map_index= rset->getInt (1);}
    //     }catch(oracle::occi::SQLException ex)
    //{
    // std::cout<<"Exception thrown: "<<std::endl;
    // std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
    // std::cout<<ex.getMessage() << std::endl;
    //}
  stmt->closeResultSet (rset);

  sqlStmt = "INSERT INTO "+tab_map+" VALUES (:1, :2, :3, :4)";
  stmt->setSQL(sqlStmt);

  std::map<int,std::vector<std::vector<float> > >::const_iterator itm;
  itm=obj->obj.begin();
  int sizeint=itm->second[0].size();
  sqlStmt1 = "INSERT INTO "+tab_data+" VALUES (:1, :2";
  for(i=1;i<sizeint+1;++i){
    ss<<i+2;
    sqlStmt1=sqlStmt1+", :"+ss.str();
    ss.str(""); // clear
  }
  sqlStmt1=sqlStmt1+")";

  sb4 si=sizeof(int);
  sb4 sf=sizeof(float);
  ub2 elensi[200];
  ub2 elensf[200];
  int c1[200],c2[200];
  float c[100][200];
  for(i=0;i<200;++i){
    elensi[i]=si;
    elensf[i]=sf;
  }

  stmt1 = con->createStatement ();
  stmt1->setSQL(sqlStmt1);

  for(itm=obj->obj.begin();itm!=obj->obj.end(); ++itm){
   int id_det=itm->first;
   int sizev=obj->obj[id_det].size();

   map_id=map_id+1;
   map_index=map_index+1;
   //  try{
   stmt->setInt (1, map_id);
   stmt->setInt (2, record);
   stmt->setInt (3, map_index);
   stmt->setInt (4, id_det);
   if(obj_name!="test") stmt->executeUpdate ();
   //}catch(oracle::occi::SQLException ex)
   //{
   //std::cout<<"Exception thrown for insertBind"<<std::endl;
   //std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
   //std::cout<<ex.getMessage() << std::endl;
   //}

   k=0;
   for(i=0;i<sizev;++i){
    int sizei=obj->obj[id_det][i].size();
    if(sizei!=sizeint){
      std::cout<<"Inconsistent object - dimention of internal vector is not "
          <<sizeint<<std::endl;
      exit(1);
    }
    c1[i]=map_id;
    k=k+1;
    c2[i]=k;
    for(j=0;j<sizei;++j){
     c[j][i]=obj->obj[id_det][i][j];
    }
   }
   //  try{
   stmt1->setDataBuffer(1, c1, oracle::occi::OCCIINT, si , &elensi[0]);
   stmt1->setDataBuffer(2, c2, oracle::occi::OCCIINT, si , &elensi[0]);
    for(j=0;j<sizeint;++j){
     stmt1->setDataBuffer(j+3, c[j], oracle::occi::OCCIFLOAT, sf, &elensf[0]);
    }
   if(obj_name!="test") stmt1->executeArrayUpdate(sizev);
   //     }catch(oracle::occi::SQLException ex)
   // {
   //  std::cout<<"Exception thrown: "<<std::endl;
   //  std::cout<<"Error number: "<<  ex.getErrorCode() << std::endl;
   //  std::cout<<ex.getMessage() << std::endl;
   // }
  }
  con->commit();
  con->terminateStatement (stmt);
  con->terminateStatement (stmt1);
} //end of cdbon_write

Member Data Documentation

oracle::occi::Connection* condbon::con [private]

Definition at line 22 of file CSCOnlineDB.h.

Referenced by cdbon_last_record(), cdbon_read_rec(), cdbon_write(), condbon(), and ~condbon().

oracle::occi::Environment* condbon::env [private]

Definition at line 21 of file CSCOnlineDB.h.

Referenced by cdbon_write(), condbon(), and ~condbon().

oracle::occi::Statement* condbon::stmt [private]

Definition at line 23 of file CSCOnlineDB.h.

Referenced by cdbon_last_record(), cdbon_read_rec(), and cdbon_write().

oracle::occi::Statement * condbon::stmt1 [private]

Definition at line 23 of file CSCOnlineDB.h.

Referenced by cdbon_read_rec(), and cdbon_write().