: mFileName(filename)
{
mDB = new CppSQLite3DB;
+ mIsAdding=false;
GimmickMessage(1,"SQLite version : "
<<std::string(mDB->SQLiteVersion())<< std::endl);
}
{
tree::Node* parent = DBGetParent(attr);
DBGraftToParent(parent,attr);
+ if(parent->GetLevel()<GetTree().GetNumberOfLevels()-1&&parent->GetLevel()>0)
+ {
+ int nC=GetNumberOfChildren(parent);
+ nC=nC+1;
+ std::stringstream out;
+ out <<nC;
+ SetAttribute(parent,"NumberOfChildren",out.str());
+ }
return (parent->GetLevel()+1);
}
DBRecursiveRemoveNode(node);
// std::cout << "DELETE"<<std::endl;
- if (node->GetParent())
+ bool remove=false;
+ tree::Node* parent=node->GetParent();
+ if (parent)
{
- node->GetParent()->RemoveChildrenFromList(node);
+ parent->RemoveChildrenFromList(node);
+ int nC=GetNumberOfChildren(parent);
+ nC=nC-1;
+ if(nC>0)
+ {
+ std::stringstream out;
+ out <<nC;
+ SetAttribute(parent,"NumberOfChildren",out.str());
+ }
+ else
+ {
+ remove=true;
+ }
+
}
delete node;
+ if(remove&&parent->GetLevel()>0)
+ {
+ Remove(parent);
+ }
// std::cout << "DELETE OK"<<std::endl;
return true;
}
{
// Iterate the children
- /*tree::Node::ChildrenListType::iterator i;
+ tree::Node::ChildrenListType::iterator i;
for (i = node->GetChildrenList().begin();
i!= node->GetChildrenList().end();
++i)
{
nbloaded += DBLoadChildren(*i,numberoflevels-1);
- }*/
+ }
+ node->SetChildrenLoaded(true);
return nbloaded;
}
-
+ else
+ {
/// If children not loaded : do it and recurse
// Query DB
CppSQLite3Query q;
QUERYDB(query,q);
+ int p=0;
while (!q.eof())
{
- // std::cout<<"Name in q: "<<q.fieldName(3)<<" Value: "<<q.getStringField(3)<<std::endl;
+
+ // std::cout << "DBLoadCh : creating node level "<<level+1<<std::endl;
+
nbloaded++;
Node* n = new Node(node);
for (int fld = 0; fld < q.numFields(); fld++)
if ( numberoflevels != 1 )
{
// msw[2].Pause();
- // nbloaded += DBLoadChildren(n, numberoflevels-1);
+ nbloaded += DBLoadChildren(n, numberoflevels-1);
// msw[2].Resume();
}
// next entry in db
}
node->SetChildrenLoaded(true);
+
// msw[2].Pause();
return nbloaded;
+ }
}
//=====================================================================
void SQLiteTreeHandler::DBGraftToParent( tree::Node* parent,
const AttributeMapType& attr)
{
- GimmickMessage(2,"Grafting to parent '"<<parent->GetLabel()
- <<"'"<<std::endl);
+ // std::cout <<"Grafting to parent '"<<parent->GetLabel()
+ // <<"'"<<std::endl;
for (int level = parent->GetLevel()+1;
level < GetTree().GetNumberOfLevels();
{
// Create Node
tree::Node* child = new tree::Node(parent,attr);
-
+ GetNumberOfChildren(parent);
+ child->SetChildrenLoaded(true);
+ // std::cout<<"Number of children "<<parent->GetNumberOfChildren()<<std::endl;
+
// Set PARENT_ID if necessary
if ( parent->GetLevel()>0 )
child->SetAttribute("PARENT_ID",parent->GetAttribute("ID"));
// Query DB
int nb=0;
int level = n->GetLevel();
- if(GetTree().GetNumberOfLevels()!=(level+1))
+
+ if(level<GetTree().GetNumberOfLevels()&& level>0)
{
- std::string query = "SELECT * FROM ";
- query += GetTree().GetLevelDescriptor(level+1).GetName();
+ std::string query = "SELECT NumberOfChildren FROM ";
+ query += GetTree().GetLevelDescriptor(level).GetName();
if (level>0)
{
- query += " WHERE PARENT_ID='" + n->UnsafeGetAttribute("ID")
+ query += " WHERE ID='" + n->UnsafeGetAttribute("ID")
+ "'";
}
-
CppSQLite3Query q;
QUERYDB(query,q);
while (!q.eof())
{
- nb++;
+ for (int fld = 0; fld < q.numFields(); fld++)
+ {
+ nb=q.getIntField(fld);
+ }
q.nextRow();
}
}
+ if(nb==0){nb=1;}
return nb;
}