66 {
67
69
70 const std::string& coralkey=
m_folder->coralFKey();
71
73 coral::AttributeList fktype;
74 std::string fktypestr;
75
76 typedef std::vector<unsigned int> KeyVec;
77 typedef std::unordered_map<long long,KeyVec > KeyMap;
78 KeyMap keymap;
79
82
83 const cool::IObject& coolobj=
m_coolitr->currentRef();
84
86
88 coolobj.until(),coolobj.channelId(),
m_spec));
90
91 const coral::AttributeList&
payload=coolobj.payload().attributeList();
92
94 fktypestr=
payload[0].specification().typeName();
96 }
97 long long ikeyval=
numAttr(fktypestr,payload[0]);
98 qbuf.add(ikeyval);
99 KeyMap::iterator kdata=keymap.find(ikeyval);
100 if (kdata==keymap.end()) {
101
102 kdata=keymap.insert(kdata,
103 KeyMap::value_type(ikeyval,KeyVec(8)));
104 KeyVec& keyvec=kdata->second;
105 keyvec.resize(1);
107 } else {
108
109 KeyVec& keyvec=kdata->second;
111 }
113 }
114
115 std::string bwhere;
116 coral::AttributeList bfkeys;
117 qbuf.getQuery(bwhere,coralkey,bfkeys,fktype[0].specification());
118
119 try {
120 m_folder->proxy()->transaction().start(
true);
122 query->setCondition(bwhere,bfkeys);
126 KeyMap::const_iterator kdata=keymap.end();
127 long long okeyval=0;
129 const coral::AttributeList&
res=
cursor.currentRow();
130
131
132
133 const long long keyval=
numAttr(fktypestr,
res[coralkey]);
134 if (keyval!=okeyval || kdata==keymap.end()) {
135 kdata=keymap.find(keyval);
136 okeyval=keyval;
137 }
138 if (kdata!=keymap.end()) {
139 KeyVec keyvec=kdata->second;
140 for (KeyVec::const_iterator kitr=keyvec.begin();
141 kitr!=keyvec.end();++kitr) {
143 }
144 } else {
145 std::ostringstream skey;
146 skey << "CoraCool key remapping error for key " << keyval;
147 throw CoraCoolException(skey.str(),"CoraCoolObjectIter::next");
148 }
149 }
151 m_folder->proxy()->transaction().commit();
152 }
153 catch (coral::Exception& e) {
154 throw CoraCoolException(
e.what(),
"CoraCoolObjectIter::next");
155 }
156
157
159 return;
160}
boost::shared_ptr< CoraCoolObject > CoraCoolObjectPtr
char data[hepevt_bytes_allocation_ATLAS]
std::pair< std::vector< unsigned int >, bool > res