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
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();
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();
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
0050
0051
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 }