X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOTimestampDatabaseHandler.cpp;h=f1561110b38acab9f7606338d6bca2e78dd16fe6;hb=9ae1b3a039da8e28aa41c6963744bfa86c382a35;hp=0e1176e95c9a958ecad6551ce69def2c9c113dea;hpb=42f7c93a6f8fc2beeb8709be1b3616ec40f4699e;p=creaImageIO.git diff --git a/src2/creaImageIOTimestampDatabaseHandler.cpp b/src2/creaImageIOTimestampDatabaseHandler.cpp index 0e1176e..f156111 100644 --- a/src2/creaImageIOTimestampDatabaseHandler.cpp +++ b/src2/creaImageIOTimestampDatabaseHandler.cpp @@ -168,6 +168,8 @@ namespace creaImageIO command += ",\nPATH text"; command += ",\nLastModified datetext"; command += ",\nLastRead datetext"; + command += ",\nTopLevelNodeId text"; + command += ",\nReferencedDB text"; command += ",\nconstraint FK_PARENT foreign key (PARENT_ID) references "; command += "FILES"; command += "(ID) on delete restrict on update restrict"; @@ -181,69 +183,68 @@ namespace creaImageIO //===================================================================== - void TimestampDatabaseHandler::CleanName(std::string& str) const + void TimestampDatabaseHandler::CleanPath(std::string& str) const { size_t pos; do { pos = str.find('\\'); - if (pos!=-1) + if ((int)pos!=-1) { str.replace(pos, 1, "/"); } } - while (pos!=-1); + while ((int)pos!=-1); } - - //===================================================================== bool TimestampDatabaseHandler::AddDirectory(const std::string& parent, const std::string& path, const time_t lastModif, - const time_t lastRead) + const time_t lastRead, + const std::string& refdb) { bool valid=false; std::string par=parent.c_str(); std::string pat=path.c_str(); - CleanName(par); - CleanName(pat); + CleanPath(par); + CleanPath(pat); - std::string pathId=IsIndexed(pat); + std::string pathId=IsIndexed(pat,refdb); //Case: It is a root parent if(parent.compare("")==0) { if(pathId.compare("")==0) { - AddFile(pat,lastModif,lastRead); + AddFile(pat,lastModif,lastRead,refdb); valid=true; } else { - valid=CheckTimestamp(pathId, lastModif); + valid=CheckTimestamp(pathId, lastModif, refdb); } } else { - std::string parentId=IsIndexed(par); + std::string parentId=IsIndexed(par,refdb); //Case: Parent is not in database if(parentId.compare("")==0) { - AddFile(par,lastModif,lastRead); - parentId=IsIndexed(par); + AddFile(par,lastModif,lastRead,refdb); + parentId=IsIndexed(par,refdb); } //Case path is not in database if(pathId.compare("")==0) { - AddFile(parentId,pat,lastModif,lastRead); + AddFile(parentId,pat,lastModif,lastRead,refdb); valid=true; } //Parent and path are in the database else { SetAttribute("PARENT_ID",parentId,"ID", pathId); - valid=CheckTimestamp(pathId, lastModif); + valid=CheckTimestamp(pathId, lastModif, refdb); } } return valid; @@ -252,11 +253,11 @@ namespace creaImageIO //===================================================================== - void TimestampDatabaseHandler::AddFile(const std::string& path, const time_t lastModif, const time_t lastRead) + void TimestampDatabaseHandler::AddFile(const std::string& path, const time_t lastModif, const time_t lastRead, const std::string& refdb) { std::stringstream out; - out<<"INSERT INTO FILES (PARENT_ID,PATH,LastModified,LastRead) VALUES(0,'"<GetNumberOfChildren(); if(n>0) @@ -325,22 +334,26 @@ namespace creaImageIO std::vector::iterator it; for(it=children.begin();it!=children.end();++it) { - RemoveNode(searchAtt,(*it)); + RemoveNode(searchAtt,(*it),refdb); } } else if(node->GetLevel()==3) { - RemoveFile(searchAtt,node->GetAttribute("FullFileName")); + RemoveFile(searchAtt,node->GetAttribute("FullFileName"),refdb); + } + else + { + DBRemove("TopLevelNodeId",node->GetAttribute("ID"),refdb); } } //===================================================================== - void TimestampDatabaseHandler::RemoveFile(const std::string& searchAtt, const std::string& searchVal) + void TimestampDatabaseHandler::RemoveFile(const std::string& searchAtt, const std::string& searchVal, const std::string& refdb ) { std::stringstream result; - std::string sel="SELECT PARENT_ID FROM FILES WHERE "+searchAtt+"='"+searchVal+"'"; + std::string sel="SELECT PARENT_ID FROM FILES WHERE "+searchAtt+"='"+searchVal+"' AND REFERENCEDDB='"+refdb+"';"; CppSQLite3Query q; QUERYTIMESTAMPDB(sel,q); @@ -353,7 +366,7 @@ namespace creaImageIO } q.nextRow(); } - DBRemove(searchAtt,searchVal); + DBRemove(searchAtt,searchVal,refdb); int nChildren=0; sel="SELECT ID FROM FILES WHERE PARENT_ID='"+result.str()+"'"; @@ -368,27 +381,27 @@ namespace creaImageIO { if(!result.str().compare("0")) { - RemoveFile("ID",result.str()); + RemoveFile("ID",result.str(),refdb); } else { - DBRemove("ID",result.str()); + DBRemove("ID",result.str(),refdb); } } } //===================================================================== - void TimestampDatabaseHandler::DBRemove(const std::string& searchAtt, const std::string& searchVal) + void TimestampDatabaseHandler::DBRemove(const std::string& searchAtt, const std::string& searchVal, const std::string& refdb) { - std::string query = "DELETE FROM FILES WHERE "+searchAtt+"='"+ searchVal + "';"; + std::string query = "DELETE FROM FILES WHERE "+searchAtt+"='"+ searchVal + "' AND REFERENCEDDB='"+refdb+"';"; UPDATETIMESTAMPDB(query); } //===================================================================== - bool TimestampDatabaseHandler::CheckTimestamp(const std::string pathId, const time_t lastModif) + bool TimestampDatabaseHandler::CheckTimestamp(const std::string pathId, const time_t lastModif, const std::string& refdb) { - std::string sel="SELECT LastModified FROM FILES WHERE ID='"+pathId+"';"; + std::string sel="SELECT LastModified FROM FILES WHERE ID='"+pathId+"' AND REFERENCEDDB='"+refdb+"';"; CppSQLite3Query q; QUERYTIMESTAMPDB(sel,q); double timestamp; @@ -414,4 +427,16 @@ namespace creaImageIO return false; } -}// namespace creaImageIO \ No newline at end of file + //===================================================================== + void TimestampDatabaseHandler::RemoveEntries(const std::string i_table, + const std::string i_attribute, + const std::string i_operand, + const std::string i_val) + { + std::stringstream query; + query<<"DELETE FROM "<