1 #ifndef RecoLuminosity_LumiProducer_HLTConf2DB_H
2 #define RecoLuminosity_LumiProducer_HLTConf2DB_H
4 #include "CoralBase/AttributeList.h"
5 #include "CoralBase/Attribute.h"
6 #include "CoralBase/AttributeSpecification.h"
7 #include "CoralBase/Exception.h"
8 #include "RelationalAccess/ConnectionService.h"
9 #include "RelationalAccess/ISessionProxy.h"
10 #include "RelationalAccess/ITransaction.h"
11 #include "RelationalAccess/ITypeConverter.h"
12 #include "RelationalAccess/IQuery.h"
13 #include "RelationalAccess/ICursor.h"
14 #include "RelationalAccess/ISchema.h"
15 #include "RelationalAccess/IView.h"
16 #include "RelationalAccess/ITable.h"
17 #include "RelationalAccess/ITableDataEditor.h"
18 #include "RelationalAccess/IBulkOperation.h"
47 std::string runsessiontable(
"RUNSESSION_PARAMETER");
50 coral::ConnectionService* svc =
new coral::ConnectionService;
56 coral::ISessionProxy* srcsession = svc->connect(
m_source, coral::ReadOnly);
57 coral::ITypeConverter& tpc = srcsession->typeConverter();
58 tpc.setCppTypeForSqlType(
"unsigned int",
"NUMBER(38)");
63 std::vector<std::pair<std::string, std::string> > hlt2l1map;
64 hlt2l1map.reserve(200);
66 srcsession->transaction().start(
true);
67 coral::ISchema& runinfoSchemaHandle = srcsession->schema(runinfoschema);
68 if (!runinfoSchemaHandle.existsTable(runsessiontable)) {
69 throw lumi::Exception(
"missing runsession table",
"retrieveData",
"HLTConf2DB");
71 coral::AttributeList rfBindVariableList;
72 rfBindVariableList.extend(
"name",
typeid(
std::string));
73 rfBindVariableList.extend(
"runnumber",
typeid(
unsigned int));
75 rfBindVariableList[
"runnumber"].data<
unsigned int>() =
runnumber;
76 coral::IQuery* kq = runinfoSchemaHandle.newQuery();
77 coral::AttributeList runinfoOut;
78 runinfoOut.extend(
"STRING_VALUE",
typeid(
std::string));
79 kq->addToTableList(runsessiontable);
80 kq->setCondition(
"NAME = :name AND RUNNUMBER = :runnumber", rfBindVariableList);
81 kq->addToOutputList(
"STRING_VALUE");
82 kq->defineOutput(runinfoOut);
83 coral::ICursor& kcursor = kq->execute();
85 while (kcursor.next()) {
86 const coral::AttributeList& row = kcursor.currentRow();
90 if (
s == 0 || hltkey.empty()) {
93 srcsession->transaction().rollback();
99 srcsession->transaction().rollback();
103 std::cout <<
"source runinfo database problem " << er.what() << std::endl;
104 srcsession->transaction().rollback();
109 coral::ISchema& confSchemaHandle = srcsession->nominalSchema();
112 if (!confSchemaHandle.existsTable(
"PATHS") || !confSchemaHandle.existsTable(
"STRINGPARAMVALUES") ||
113 !confSchemaHandle.existsTable(
"PARAMETERS") || !confSchemaHandle.existsTable(
"SUPERIDPARAMETERASSOC") ||
114 !confSchemaHandle.existsTable(
"MODULES") || !confSchemaHandle.existsTable(
"MODULETEMPLATES") ||
115 !confSchemaHandle.existsTable(
"PATHMODULEASSOC") || !confSchemaHandle.existsTable(
"CONFIGURATIONPATHASSOC") ||
116 !confSchemaHandle.existsTable(
"CONFIGURATIONS")) {
117 throw lumi::Exception(
"missing hlt conf tables",
"retrieveData",
"HLTConf2DB");
119 coral::AttributeList q1BindVariableList;
120 q1BindVariableList.extend(
"hltseed",
typeid(
std::string));
121 q1BindVariableList.extend(
"l1seedexpr",
typeid(
std::string));
122 q1BindVariableList.extend(
"hltkey",
typeid(
std::string));
125 q1BindVariableList[
"hltkey"].data<
std::string>() = hltkey;
126 coral::IQuery*
q1 = confSchemaHandle.newQuery();
127 q1->addToOutputList(
"PATHS.NAME",
"hltpath");
128 q1->addToOutputList(
"STRINGPARAMVALUES.VALUE",
"l1expression");
130 q1->addToTableList(
"PATHS");
131 q1->addToTableList(
"STRINGPARAMVALUES");
132 q1->addToTableList(
"PARAMETERS");
133 q1->addToTableList(
"SUPERIDPARAMETERASSOC");
134 q1->addToTableList(
"MODULES");
135 q1->addToTableList(
"MODULETEMPLATES");
136 q1->addToTableList(
"PATHMODULEASSOC");
137 q1->addToTableList(
"CONFIGURATIONPATHASSOC");
138 q1->addToTableList(
"CONFIGURATIONS");
141 "PARAMETERS.PARAMID=STRINGPARAMVALUES.PARAMID and SUPERIDPARAMETERASSOC.PARAMID=PARAMETERS.PARAMID and "
142 "MODULES.SUPERID=SUPERIDPARAMETERASSOC.SUPERID and MODULETEMPLATES.SUPERID=MODULES.TEMPLATEID and "
143 "PATHMODULEASSOC.MODULEID=MODULES.SUPERID and PATHS.PATHID=PATHMODULEASSOC.PATHID and "
144 "CONFIGURATIONPATHASSOC.PATHID=PATHS.PATHID and CONFIGURATIONS.CONFIGID=CONFIGURATIONPATHASSOC.CONFIGID and "
145 "MODULETEMPLATES.NAME = :hltseed and PARAMETERS.NAME = :l1seedexpr and CONFIGURATIONS.CONFIGDESCRIPTOR = "
152 coral::ICursor& cursor1 =
q1->execute();
153 while (cursor1.next()) {
154 const coral::AttributeList& row = cursor1.currentRow();
157 hlt2l1map.push_back(std::make_pair(hltpath, l1expression));
162 std::cout <<
"database problem with source hlt confdb" << er.what() << std::endl;
163 srcsession->transaction().rollback();
167 srcsession->transaction().commit();
169 std::vector<std::pair<std::string, std::string> >::const_iterator mIt;
170 std::vector<std::pair<std::string, std::string> >::const_iterator mBeg = hlt2l1map.begin();
171 std::vector<std::pair<std::string, std::string> >::const_iterator mEnd = hlt2l1map.end();
173 coral::ISessionProxy* destsession = svc->connect(
m_dest, coral::Update);
176 destsession->transaction().start(
true);
177 bool hltkeyExists =
false;
178 coral::AttributeList kQueryBindList;
179 kQueryBindList.extend(
"hltkey",
typeid(
std::string));
181 kQuery->setCondition(
"HLTKEY =:hltkey", kQueryBindList);
182 kQueryBindList[
"hltkey"].data<
std::string>() = hltkey;
183 coral::ICursor& kResult = kQuery->execute();
184 while (kResult.next()) {
188 std::cout <<
"hltkey " << hltkey <<
" already registered , do nothing" << std::endl;
189 destsession->transaction().commit();
194 destsession->transaction().commit();
195 destsession->transaction().start(
false);
196 coral::ISchema& destschema = destsession->nominalSchema();
198 coral::AttributeList hltconfData;
202 coral::IBulkOperation* hltconfInserter = hltconftable.dataEditor().bulkInsert(hltconfData, 200);
203 hltconfData[
"HLTKEY"].data<
std::string>() = hltkey;
206 for (mIt = mBeg; mIt != mEnd; ++mIt) {
207 hltpathname = mIt->first;
208 l1seedname = mIt->second;
209 hltconfInserter->processNextIteration();
212 hltconfInserter->flush();
213 delete hltconfInserter;
214 destsession->transaction().commit();
216 std::cout <<
"database problem " << er.what() << std::endl;
217 destsession->transaction().rollback();