X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOSQLiteTreeHandler.cpp;h=52042a21a097d8564bbae4950d2ed4ec8890dea8;hb=71365e2ce56b1ccf93054818d5d5cf64bcbaafb4;hp=4363e7c0a99de19d39fc44b4e0570f0598a9496d;hpb=8d73d5f58d80abb928a7f60037837c2933b16bbd;p=creaImageIO.git diff --git a/src2/creaImageIOSQLiteTreeHandler.cpp b/src2/creaImageIOSQLiteTreeHandler.cpp index 4363e7c..52042a2 100644 --- a/src2/creaImageIOSQLiteTreeHandler.cpp +++ b/src2/creaImageIOSQLiteTreeHandler.cpp @@ -36,6 +36,7 @@ namespace creaImageIO : mFileName(filename) { mDB = new CppSQLite3DB; + mIsAdding=false; GimmickMessage(1,"SQLite version : " <SQLiteVersion())<< std::endl); } @@ -143,11 +144,28 @@ namespace creaImageIO DBRecursiveRemoveNode(node); // std::cout << "DELETE"<GetParent()) + bool remove=false; + tree::Node* parent=node->GetParent(); + if (parent) { - node->GetParent()->RemoveChildrenFromList(node); + int nC = parent->RemoveChildrenFromList(node); + if(nC>0) + { + std::stringstream out; + out <GetLevel()>0) + { + Remove(parent); + } // std::cout << "DELETE OK"<GetChildrenList().begin(); i!= node->GetChildrenList().end(); ++i) { nbloaded += DBLoadChildren(*i,numberoflevels-1); - }*/ + } + node->SetChildrenLoaded(true); return nbloaded; } - + else + { /// If children not loaded : do it and recurse // Query DB @@ -687,9 +725,12 @@ namespace creaImageIO CppSQLite3Query q; QUERYDB(query,q); + int p=0; while (!q.eof()) { - // std::cout<<"Name in q: "<SetChildrenLoaded(true); + // msw[2].Pause(); return nbloaded; + } } //===================================================================== @@ -747,8 +790,8 @@ namespace creaImageIO void SQLiteTreeHandler::DBGraftToParent( tree::Node* parent, const AttributeMapType& attr) { - GimmickMessage(2,"Grafting to parent '"<GetLabel() - <<"'"<GetLabel() + // <<"'"<GetLevel()+1; level < GetTree().GetNumberOfLevels(); @@ -756,7 +799,17 @@ namespace creaImageIO { // Create Node tree::Node* child = new tree::Node(parent,attr); - + child->SetChildrenLoaded(true); + if (level>1) + { + int nc = GetNumberOfChildren(parent)+1; + + // std::cout<<"Number of children "<GetNumberOfChildren()<GetLevel()>0 ) child->SetAttribute("PARENT_ID",parent->GetAttribute("ID")); @@ -814,17 +867,38 @@ namespace creaImageIO sql += GetTree().GetLevelDescriptor(n->GetLevel()).GetName(); sql += " SET "; sql += key; - sql += "='"; + sql += " = '"; sql += value; - sql += "' WHERE ID="; + sql += "' WHERE ID = '"; sql += n->GetAttribute("ID"); + sql +="'"; // sql += " LIMIT 1"; UPDATEDB(sql); } - //===================================================================== + //===================================================================== + /// Sets an attribute of a Node + void SQLiteTreeHandler::DBSetAttribute(const std::string& levelDescriptor, + const std::string& key, + const std::string& value, + const std::string& searchParam, + const std::string& searchVal) + { - //===================================================================== + std::string sql = "UPDATE "; + sql += levelDescriptor; + sql += " SET "; + sql += key; + sql += " = '"; + sql += value; + sql += "' WHERE "; + sql += searchParam; + sql += " = '"; + sql += searchVal; + sql += "'"; + UPDATEDB(sql); + } + //===================================================================== void SQLiteTreeHandler::DBRecursiveRemoveNode(Node* node) { @@ -850,32 +924,87 @@ namespace creaImageIO } } + //===================================================================== + void SQLiteTreeHandler::DBDelete(std::string levelDescriptor, std::string key, std::string value) + { + + std::stringstream query; + query<<"DELETE FROM "<GetLevel(); - if(GetTree().GetNumberOfLevels()!=(level+1)) - { - std::string query = "SELECT * FROM "; - query += GetTree().GetLevelDescriptor(level+1).GetName(); - if (level>0) - { - query += " WHERE PARENT_ID='" + n->UnsafeGetAttribute("ID") - + "'"; - } - CppSQLite3Query q; - QUERYDB(query,q); + if(level0) + { + std::string query = "SELECT NumberOfChildren FROM "; + query += GetTree().GetLevelDescriptor(level).GetName(); + if (level>0) + { + query += " WHERE ID='" + n->UnsafeGetAttribute("ID") + + "'"; + } + CppSQLite3Query q; + QUERYDB(query,q); - - while (!q.eof()) - { - nb++; - q.nextRow(); - } - } + + while (!q.eof()) + { + for (int fld = 0; fld < q.numFields(); fld++) + { + nb=q.getIntField(fld); + } + q.nextRow(); + } + } + /* + if(nb==0) + { + nb=1; + } + */ return nb; }