33 cool::IObjectIteratorPtr coolitr) :
39 const cool::RecordSpecification recspec=
m_folder->payloadSpecification();
40 const coral::AttributeList speclist = cool::Record(recspec).attributeList();
41 m_spec=
new coral::AttributeListSpecification();
42 for (coral::AttributeList::const_iterator itr=speclist.begin();
43 itr!=speclist.end();++itr) {
44 const coral::AttributeSpecification& aspec=itr->specification();
45 m_spec->extend(aspec.name(),aspec.typeName());
70 const std::string& coralkey=
m_folder->coralFKey();
73 coral::AttributeList fktype;
74 std::string fktypestr;
76 typedef std::vector<unsigned int> KeyVec;
77 typedef std::unordered_map<long long,KeyVec > KeyMap;
83 const cool::IObject& coolobj=
m_coolitr->currentRef();
88 coolobj.until(),coolobj.channelId(),
m_spec));
91 const coral::AttributeList& payload=coolobj.payload().attributeList();
94 fktypestr=payload[0].specification().typeName();
97 long long ikeyval=
numAttr(fktypestr,payload[0]);
99 KeyMap::iterator kdata=keymap.find(ikeyval);
100 if (kdata==keymap.end()) {
102 kdata=keymap.insert(kdata,
103 KeyMap::value_type(ikeyval,KeyVec(8)));
104 KeyVec& keyvec=kdata->second;
109 KeyVec& keyvec=kdata->second;
116 coral::AttributeList bfkeys;
117 qbuf.
getQuery(bwhere,coralkey,bfkeys,fktype[0].specification());
120 m_folder->proxy()->transaction().start(
true);
122 query->setCondition(bwhere,bfkeys);
125 coral::ICursor& cursor=
query->execute();
126 KeyMap::const_iterator kdata=keymap.end();
128 while (cursor.next()) {
129 const coral::AttributeList&
res=cursor.currentRow();
133 const long long keyval=
numAttr(fktypestr,
res[coralkey]);
134 if (keyval!=okeyval || kdata==keymap.end()) {
135 kdata=keymap.find(keyval);
138 if (kdata!=keymap.end()) {
139 KeyVec keyvec=kdata->second;
140 for (KeyVec::const_iterator kitr=keyvec.begin();
141 kitr!=keyvec.end();++kitr) {
145 std::ostringstream skey;
146 skey <<
"CoraCool key remapping error for key " << keyval;
151 m_folder->proxy()->transaction().commit();
153 catch (coral::Exception& e) {
354 coral::AttributeList& fkeys,
const coral::AttributeSpecification& spec,
355 const long long value) {
357 std::ostringstream skey;
359 std::string keyname=skey.str();
360 fkeys.extend(keyname,spec.type());
361 std::string typeName=spec.typeName();
362 if (typeName==
"long long") {
363 fkeys[keyname].data<
long long>()=value;
364 }
else if (typeName==
"unsigned long long") {
365 fkeys[keyname].data<
unsigned long long>()=value;
366 }
else if (typeName==
"int") {
367 fkeys[keyname].data<
int>()=value;
368 }
else if (typeName==
"unsigned int") {
369 fkeys[keyname].data<
unsigned int>()=value;
370 }
else if (typeName==
"long") {
371 fkeys[keyname].data<
long>()=value;
372 }
else if (typeName==
"unsigned long") {
373 fkeys[keyname].data<
unsigned long>()=value;
376 "CoraCoolObjectIter::QueryBuilder::addKey");