X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOTimestampDatabaseHandler.cpp;h=a0a522b019eecc644a1c325b389928bf1cad3a63;hb=e13ea6551e8721b11998dc33ddccf3f89458f173;hp=a05bc260f9189fbbb309e1dd8a49838ab1e2cf0b;hpb=7ae1412df3d682f639683e751f46a3f07be16d0b;p=creaImageIO.git diff --git a/src2/creaImageIOTimestampDatabaseHandler.cpp b/src2/creaImageIOTimestampDatabaseHandler.cpp index a05bc26..a0a522b 100644 --- a/src2/creaImageIOTimestampDatabaseHandler.cpp +++ b/src2/creaImageIOTimestampDatabaseHandler.cpp @@ -7,13 +7,6 @@ #include -#include "wx/wx.h" -#include -#include - -#include -using namespace crea; - #include #include @@ -169,6 +162,7 @@ namespace creaImageIO 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"; @@ -182,69 +176,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; @@ -253,11 +246,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) @@ -331,26 +327,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")); + 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); @@ -363,7 +359,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()+"'"; @@ -378,27 +374,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; @@ -424,4 +420,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 "<