#include <creaImageIOSQLiteTreeHandler.h>
#include <creaImageIOSystem.h>
#include <creaImageIOGimmick.h>
-#include <creaImageIOTree.h>
#include "CppSQLite3.h"
command += "\n)";
UPDATEDB(command);
+ GetTree().CopyAttributeDescriptorList(l);
// Add Attribute 'ID' to Description
GetTree().GetDescriptor().Add
return false;
}
+ GetTree().CopyAttributeDescriptorList(level);
}
{
std::string query = "DELETE FROM ";
-
-
- query += GetTree().GetLevelDescriptor(node->GetLevel()).GetName();
-
+ query += GetTree().GetLevelDescriptor(node->GetLevel()).GetName();
query += " WHERE ID='"+ node->GetAttribute("ID") + "';";
-
- UPDATEDB(query);
- GimmickDebugMessage(2,
- " Deleting '"
- <<node->GetLabel()<<"' with ID '"
- <<node->GetAttribute("ID")
- <<"' in level "<< GetTree().GetLevelDescriptor(node->GetLevel()).GetName()
- <<std::endl);
-
-
+ UPDATEDB(query);
+
if(node->GetNumberOfChildren()!=0)
{
Node::ChildrenListType::iterator i;
return nb;
}
- //=====================================================================
- void SQLiteTreeHandler::GetTopLevelNodeId(const std::string& searchParam, const std::string& searchValue, std::string& parent_id)
+//=====================================================================
+// get all attributes from database for a given file
+ void SQLiteTreeHandler::getAllAttributes(std::string i_filename, std::map<std::string, std::string> &i_results)
{
int level=GetTree().GetNumberOfLevels()-1;
- std::string sp=searchParam.c_str();
- std::string sv=searchValue.c_str();
+
+ std::string search = i_filename;
+ std::string param = "FullFileName";
+ std::string name;
+ std::string id;
+ std::set<std::string> pid;
+ std::vector<AttributeDescriptor> attr;
+ std::vector<AttributeDescriptor>::iterator it_attr;
+ std::vector<std::string> values;
+ std::vector<std::string>::iterator it_val;
+
+
+
+
while(level>1)
{
- std::stringstream out;
- std::stringstream results;
- out<<"SELECT PARENT_ID FROM "<<GetTree().GetLevelDescriptor(level).GetName();
- out<<" WHERE "<<sp<<"='"<<sv<<"'";
- CppSQLite3Query q;
- QUERYDB(out.str(),q);
-
-
- while (!q.eof())
- {
+ attr = GetTree().GetAttributeDescriptorList(level,1);
+
+ name = GetTree().GetLevelDescriptor(level).GetName();
+ std::vector<std::string> values;
+ GetUpLevelNodeId(level, param,search,id);
+ GetAttributes(name, param,search,attr, values);
+ for(it_attr = attr.begin(), it_val = values.begin(); it_attr != attr.end(); it_attr++, it_val++)
+ {
+ i_results[(*it_attr).GetKey()] = (*it_val).c_str();
+ }
+ search = id;
+ param = "ID";
+ level --;
+ }
+ }
+
+
+//=====================================================================
+// get selected attributes from database for a given file
+ void SQLiteTreeHandler::GetAttributes(std::string name, std::string i_id, std::string i_value, tree::LevelDescriptor::AttributeDescriptorListType i_attr, std::vector<std::string> &i_results)
+ {
+ //SELECT t1.ArtistName,CDs.Title FROM Artists t1, CDs WHERE t1.ArtistID=CDs.ArtistID
+ std::stringstream out;
+ std::stringstream results;
+ out<<"SELECT ";
+ tree::LevelDescriptor::AttributeDescriptorListType::iterator it = i_attr.begin();
+ std::string query ="";
+ for(; it != i_attr.end(); it++)
+ {
+ query += (*it).GetKey();
+ query +=" ,";
+ }
+ query = query.substr(0, query.size()-1);
+ out << query;
+ out << "FROM "<<name;
+ out<<" WHERE "<<i_id <<"='"<<i_value<<"'";
+ CppSQLite3Query q;
+ QUERYDB(out.str(),q);
+ while (!q.eof())
+ {
for (int fld = 0; fld < q.numFields(); fld++)
{
- results<<q.getStringField(fld);
+ i_results.push_back(q.getStringField(fld));
}
q.nextRow();
+ }
+ }
+
+ void SQLiteTreeHandler::GetUpLevelNodeId(int level, const std::string& searchParam, const std::string& searchValue, std::string& parent_id)
+ {
+ std::string sp=searchParam.c_str();
+ std::string sv=searchValue.c_str();
+ std::stringstream out;
+ std::stringstream results;
+ out<<"SELECT PARENT_ID FROM "<<GetTree().GetLevelDescriptor(level).GetName();
+ out<<" WHERE "<<sp<<"='"<<sv<<"'";
+ CppSQLite3Query q;
+ QUERYDB(out.str(),q);
+ while (!q.eof())
+ {
+ for (int fld = 0; fld < q.numFields(); fld++)
+ {
+ results<<q.getStringField(fld);
}
- level=level-1;
- sp="ID";
- sv=results.str();
+ q.nextRow();
+ }
+ parent_id = results.str();
+
+ }
+
+
+ //=====================================================================
+ void SQLiteTreeHandler::GetTopLevelNodeId(const std::string& searchParam, const std::string& searchValue, std::string& parent_id)
+ {
+ int level=GetTree().GetNumberOfLevels()-1;
+ std::string sp=searchParam.c_str();
+ std::string sv=searchValue.c_str();
+
+ while(level>1)
+ {
+ GetUpLevelNodeId(level, sp, sv, parent_id);
+ level--;
+ sp = "ID";
+ sv = parent_id;
}
- parent_id=sv;
+///*
+// std::stringstream out;
+// std::stringstream results;
+// out<<"SELECT PARENT_ID FROM "<<GetTree().GetLevelDescriptor(level).GetName();
+// out<<" WHERE "<<sp<<"='"<<sv<<"'";
+// CppSQLite3Query q;
+// QUERYDB(out.str(),q);
+//
+//
+// while (!q.eof())
+// {
+// for (int fld = 0; fld < q.numFields(); fld++)
+// {
+// results<<q.getStringField(fld);
+// }
+// q.nextRow();
+// }*/
+// level=level-1;
+// sp="ID";
+// sv=results.str();
+// }
+// parent_id=sv;
}