Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:26:37

0001 #include "RecoLuminosity/LumiProducer/interface/idDealer.h"
0002 #include "RelationalAccess/ISchema.h"
0003 #include "RelationalAccess/ITable.h"
0004 #include "RelationalAccess/IQuery.h"
0005 #include "RelationalAccess/ICursor.h"
0006 #include "RelationalAccess/ITableDataEditor.h"
0007 #include "CoralBase/AttributeList.h"
0008 #include "CoralBase/AttributeSpecification.h"
0009 #include "CoralBase/AttributeList.h"
0010 #include "CoralBase/Attribute.h"
0011 #include "RecoLuminosity/LumiProducer/interface/LumiNames.h"
0012 #include <sstream>
0013 //#include <iostream>
0014 lumi::idDealer::idDealer(coral::ISchema& schema)
0015     : m_schema(schema),
0016       m_idtablecolumnName(lumi::LumiNames::idTableColumnName()),
0017       m_idtablecolumnType(lumi::LumiNames::idTableColumnType()) {}
0018 unsigned long long lumi::idDealer::getIDforTable(const std::string& tableName) {
0019   std::string idtableName = lumi::LumiNames::idTableName(tableName);
0020   coral::IQuery* q = m_schema.tableHandle(idtableName).newQuery();
0021   q->addToOutputList(m_idtablecolumnName);
0022   q->setForUpdate();  //lock it
0023   coral::ICursor& cursor = q->execute();
0024   unsigned long long result = 0;
0025   while (cursor.next()) {
0026     const coral::AttributeList& row = cursor.currentRow();
0027     result = row[m_idtablecolumnName].data<unsigned long long>();
0028   }
0029   cursor.close();
0030   delete q;
0031   return result;
0032 }
0033 unsigned long long lumi::idDealer::generateNextIDForTable(const std::string& tableName, unsigned int interval) {
0034   std::string idtableName = lumi::LumiNames::idTableName(tableName);
0035   coral::IQuery* q = m_schema.tableHandle(idtableName).newQuery();
0036   q->addToOutputList(m_idtablecolumnName);
0037   unsigned long long r = 0;
0038   coral::AttributeList myresult;
0039   myresult.extend(m_idtablecolumnName, typeid(unsigned long long));
0040   q->defineOutput(myresult);
0041   q->setForUpdate();  //lock it
0042   coral::ICursor& cursor = q->execute();
0043   while (cursor.next()) {
0044     const coral::AttributeList& row = cursor.currentRow();
0045     r = row[m_idtablecolumnName].data<unsigned long long>();
0046   }
0047   coral::ITableDataEditor& dataEditor = m_schema.tableHandle(idtableName).dataEditor();
0048   coral::AttributeList inputData;
0049   //inputData.extend("interval",typeid(unsigned int));
0050   //inputData["interval"].data<unsigned int>()=interval;
0051   //dataEditor.updateRows(m_idtablecolumnName+"="+m_idtablecolumnName+"+1","",inputData);
0052   std::stringstream ss;
0053   ss << interval;
0054   dataEditor.updateRows(m_idtablecolumnName + "=" + m_idtablecolumnName + "+" + ss.str(), "", inputData);
0055   delete q;
0056   return r + interval;
0057 }