88 std::cout <<
"last configuration key already copied for run: " <<
last << std::endl;
90 std::vector<DTConfigKey> lastKey;
100 std::cout <<
"get last payload" << std::endl;
102 std::cout <<
"get last full key" << std::endl;
105 std::vector<DTConfigKey>::const_iterator keyIter = lastKey.begin();
106 std::vector<DTConfigKey>::const_iterator keyIend = lastKey.end();
107 while (keyIter != keyIend) {
113 std::cout <<
"configure DbConnection" << std::endl;
118 std::cout <<
"create/open DbSession" << std::endl;
120 std::cout <<
"start transaction" << std::endl;
121 isession->transaction().start(
true);
124 std::cout <<
"retrieve CCB map" << std::endl;
125 std::map<int, DTCCBId> ccbMap;
126 coral::ITable& ccbMapTable =
isession->nominalSchema().tableHandle(
"CCBMAP");
127 std::unique_ptr<coral::IQuery> ccbMapQuery(ccbMapTable.newQuery());
128 ccbMapQuery->addToOutputList(
"CCBID");
129 ccbMapQuery->addToOutputList(
"WHEEL");
130 ccbMapQuery->addToOutputList(
"SECTOR");
131 ccbMapQuery->addToOutputList(
"STATION");
132 coral::ICursor& ccbMapCursor = ccbMapQuery->execute();
133 while (ccbMapCursor.next()) {
134 const coral::AttributeList& row = ccbMapCursor.currentRow();
135 int ccb = row[
"CCBID"].data<
int>();
136 int wheel = row[
"WHEEL"].data<
int>();
137 int sector = row[
"SECTOR"].data<
int>();
138 int station = row[
"STATION"].data<
int>();
142 ccbId.sectorId = sector;
143 ccbMap.insert(std::pair<int, DTCCBId>(ccb, ccbId));
147 std::cout <<
"retrieve brick types" << std::endl;
148 std::map<int, int> bktMap;
149 coral::AttributeList emptyBindVariableList;
150 std::unique_ptr<coral::IQuery> brickTypeQuery(
isession->nominalSchema().newQuery());
151 brickTypeQuery->addToTableList(
"CFGBRICKS");
152 brickTypeQuery->addToTableList(
"BRKT2CSETT");
153 std::string bTypeCondition =
"CFGBRICKS.BRKTYPE=BRKT2CSETT.BRKTYPE";
154 brickTypeQuery->addToOutputList(
"CFGBRICKS.BRKID");
155 brickTypeQuery->addToOutputList(
"BRKT2CSETT.CSETTYPE");
156 brickTypeQuery->setCondition(bTypeCondition, emptyBindVariableList);
157 coral::ICursor& brickTypeCursor = brickTypeQuery->execute();
158 while (brickTypeCursor.next()) {
159 const coral::AttributeList& row = brickTypeCursor.currentRow();
160 int id = row[
"CFGBRICKS.BRKID"].data<
int>();
161 int bt = row[
"BRKT2CSETT.CSETTYPE"].data<
short>();
165 bktMap.insert(std::pair<int, int>(
id, bt));
169 std::cout <<
"retrieve CCB configuration keys" << std::endl;
170 std::map<int, std::map<int, int>*> keyMap;
171 std::map<int, int> cckMap;
172 coral::ITable& ccbRelTable =
isession->nominalSchema().tableHandle(
"CCBRELATIONS");
173 std::unique_ptr<coral::IQuery> ccbRelQuery(ccbRelTable.newQuery());
174 ccbRelQuery->addToOutputList(
"CONFKEY");
175 ccbRelQuery->addToOutputList(
"CCBID");
176 ccbRelQuery->addToOutputList(
"CONFCCBKEY");
177 coral::ICursor& ccbRelCursor = ccbRelQuery->execute();
179 while (ccbRelCursor.next()) {
180 const coral::AttributeList& row = ccbRelCursor.currentRow();
181 int cfg = row[
"CONFKEY"].data<
int>();
182 int ccb = row[
"CCBID"].data<
int>();
183 int key = row[
"CONFCCBKEY"].data<
int>();
188 std::map<int, std::map<int, int>*>::const_iterator keyIter = keyMap.find(
cfg);
189 std::map<int, std::map<int, int>*>::const_iterator keyIend = keyMap.end();
190 std::map<int, int>* mapPtr =
nullptr;
192 if (keyIter != keyIend)
193 mapPtr = keyIter->second;
195 keyMap.insert(std::pair<
int, std::map<int, int>*>(
cfg, mapPtr =
new std::map<int, int>));
197 std::map<int, int>& mapRef(*mapPtr);
198 mapRef.insert(std::pair<int, int>(ccb,
key));
200 if (cckMap.find(
key) == cckMap.end())
201 cckMap.insert(std::pair<int, int>(
key, ccb));
205 std::cout <<
"retrieve CCB configuration bricks" << std::endl;
206 std::map<int, std::vector<int>*> brkMap;
207 coral::ITable& confBrickTable =
isession->nominalSchema().tableHandle(
"CFG2BRKREL");
208 std::unique_ptr<coral::IQuery> confBrickQuery(confBrickTable.newQuery());
209 confBrickQuery->addToOutputList(
"CONFID");
210 confBrickQuery->addToOutputList(
"BRKID");
211 coral::ICursor& confBrickCursor = confBrickQuery->execute();
213 while (confBrickCursor.next()) {
214 const coral::AttributeList& row = confBrickCursor.currentRow();
215 int key = row[
"CONFID"].data<
int>();
216 int brk = row[
"BRKID"].data<
int>();
218 if (cckMap.find(
key) == cckMap.end())
220 std::map<int, std::vector<int>*>::const_iterator brkIter = brkMap.find(
key);
221 std::map<int, std::vector<int>*>::const_iterator brkIend = brkMap.end();
223 std::vector<int>* brkPtr =
nullptr;
224 if (brkIter != brkIend)
225 brkPtr = brkIter->second;
227 brkMap.insert(std::pair<
int, std::vector<int>*>(
key, brkPtr =
new std::vector<int>));
229 brkPtr->push_back(brk);
236 std::map<int, bool> userBricks;
237 std::map<int, bool>::const_iterator uBrkIter = userBricks.begin();
238 std::map<int, bool>::const_iterator uBrkIend = userBricks.end();
239 std::vector<DTConfigKey>::const_iterator cfgIter =
userConf.begin();
240 std::vector<DTConfigKey>::const_iterator cfgIend =
userConf.end();
241 while (cfgIter != cfgIend) {
246 std::map<int, std::map<int, int>*>::const_iterator keyIter = keyMap.find(
cfg);
247 std::map<int, std::map<int, int>*>::const_iterator keyIend = keyMap.end();
248 std::map<int, int>* mapPtr =
nullptr;
249 if (keyIter != keyIend)
250 mapPtr = keyIter->second;
251 if (mapPtr ==
nullptr)
253 std::map<int, int>::const_iterator ccbIter = mapPtr->begin();
254 std::map<int, int>::const_iterator ccbIend = mapPtr->end();
255 while (ccbIter != ccbIend) {
256 const std::pair<int, int>& ccbEntry = *ccbIter++;
258 int ccb = ccbEntry.first;
259 int key = ccbEntry.second;
261 std::map<int, DTCCBId>::const_iterator ccbIter = ccbMap.find(ccb);
262 std::map<int, DTCCBId>::const_iterator ccbIend = ccbMap.end();
263 if (ccbIter == ccbIend)
265 const DTCCBId& chaId = ccbIter->second;
267 std::map<int, std::vector<int>*>::const_iterator brkIter = brkMap.find(
key);
268 std::map<int, std::vector<int>*>::const_iterator brkIend = brkMap.end();
269 if (brkIter == brkIend)
271 std::vector<int>* brkPtr = brkIter->second;
272 if (brkPtr ==
nullptr)
275 std::vector<int> bkList;
277 std::map<int, int>::const_iterator bktIter = bktMap.begin();
278 std::map<int, int>::const_iterator bktIend = bktMap.end();
279 std::vector<int>::const_iterator bkiIter = brkPtr->begin();
280 std::vector<int>::const_iterator bkiIend = brkPtr->end();
281 while (bkiIter != bkiIend) {
282 int brickId = *bkiIter++;
283 bktIter = bktMap.find(brickId);
284 if (bktIter == bktIend)
286 if (bktIter->second == cft) {
287 bkList.push_back(brickId);
288 uBrkIter = userBricks.find(brickId);
289 if (uBrkIter == uBrkIend)
290 userBricks.insert(std::pair<int, bool>(brickId,
true));
299 std::cout <<
"writing payload : " <<
sizeof(*fullConf) <<
" ( " << (fullConf->
end() - fullConf->
begin()) <<
" ) "