#include <deque>
-#include "wx/wx.h"
-#include <wx/dir.h>
-#include <wx/filename.h>
-
-#include <creaWx.h>
-using namespace crea;
-
#include <boost/filesystem.hpp>
#include <boost/algorithm/string/replace.hpp>
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";
//=====================================================================
- 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;
//=====================================================================
- 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,'"<<path<<"',";
- out<<lastModif<<","<<lastRead<<");";
+ out<<"INSERT INTO FILES (PARENT_ID,PATH,LastModified,LastRead,ReferencedDB) VALUES(0,'"<<path<<"',";
+ out<<lastModif<<","<<lastRead<<",'"<<refdb<<"');";
UPDATETIMESTAMPDB(out.str());
}
void TimestampDatabaseHandler::AddFile(const std::string& parentId,
const std::string& path,
const time_t lastModif,
- const time_t lastRead)
+ const time_t lastRead,
+ const std::string& refdb)
{
std::stringstream out;
- out<<"INSERT INTO FILES (PARENT_ID,PATH,LastModified,LastRead) VALUES("<<parentId<<",'"<<path<<"',";
- out<<lastModif<<","<<lastRead<<");";
+ out<<"INSERT INTO FILES (PARENT_ID,PATH,LastModified,LastRead,ReferencedDB) VALUES("<<parentId<<",'"<<path<<"',";
+ out<<lastModif<<","<<lastRead<<",'"<<refdb<<"');";
UPDATETIMESTAMPDB(out.str());
}
//=====================================================================
- std::string TimestampDatabaseHandler::IsIndexed(const std::string& path)
+ std::string TimestampDatabaseHandler::IsIndexed(const std::string& path, const std::string& refdb)
{
+ std::string pat=path.c_str();
+ CleanPath(pat);
std::stringstream out;
std::stringstream result;
- out<<"SELECT ID FROM FILES WHERE PATH='"<<path<<"'";
+ out<<"SELECT ID FROM FILES WHERE PATH='"<<pat<<"' AND REFERENCEDDB='"<<refdb<<"';";
CppSQLite3Query q;
QUERYTIMESTAMPDB(out.str(),q);
{
std::string av=attValue.c_str();
std::string sv=searchValue.c_str();
- CleanName(av);
- CleanName(sv);
+ CleanPath(av);
+ CleanPath(sv);
std::string sql = "UPDATE FILES SET ";
sql += attName;
}
//=====================================================================
- void TimestampDatabaseHandler::RemoveNode(const std::string& searchAtt, const tree::Node* node)
+ void TimestampDatabaseHandler::RemoveNode(const std::string& searchAtt, const tree::Node* node, const std::string& refdb)
{
int n=node->GetNumberOfChildren();
if(n>0)
std::vector<tree::Node*>::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);
}
q.nextRow();
}
- DBRemove(searchAtt,searchVal);
+ DBRemove(searchAtt,searchVal,refdb);
int nChildren=0;
sel="SELECT ID FROM FILES WHERE PARENT_ID='"+result.str()+"'";
{
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;
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 "<<i_table<<" WHERE "<<i_attribute<<" "<<i_operand<<" '"<<i_val<<"'";
+ UPDATETIMESTAMPDB(query.str());
+ }
+
+}// namespace creaImageIO
+