X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOTimestampDatabaseHandler.cpp;h=167224be19496f29074a278b5c30343f542a8fb2;hb=8b74b6a37dfc8b8a3ebb4f9f8e4b46429da0e4c7;hp=be586d8cdf5f924ac80e5792f1d6c724cca27259;hpb=67ba001e49dd897529b15024108831bdd4621edf;p=creaImageIO.git diff --git a/src2/creaImageIOTimestampDatabaseHandler.cpp b/src2/creaImageIOTimestampDatabaseHandler.cpp index be586d8..167224b 100644 --- a/src2/creaImageIOTimestampDatabaseHandler.cpp +++ b/src2/creaImageIOTimestampDatabaseHandler.cpp @@ -169,6 +169,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,7 +183,7 @@ namespace creaImageIO //===================================================================== - void TimestampDatabaseHandler::CleanName(std::string& str) const + void TimestampDatabaseHandler::CleanPath(std::string& str) const { size_t pos; do @@ -195,56 +196,55 @@ namespace creaImageIO } 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 +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) @@ -331,26 +332,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 +364,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 +379,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;