[buddypress-dev] bpcontents 1.0 alpha 1 using MPTT

Burt Adsit burt at ourcommoninterest.org
Tue May 26 02:20:33 GMT 2009


bpc uses a mechanism called Modifed Pre-Order Tree Traversal (MPTT) that 
was specifically designed to track tree like structures in SQL tables. I 
need to find out if that part of the core is working properly.

When you look at the properties for a node, in the class OCI_Node, 
you'll notice two vars $this->lft and $this->rgt. These are MPTT specfic 
vars that represent the parent/child relationships of all nodes in the 
tree. . See these for info about MPTT:

http://www.sitepoint.com/article/hierarchical-data-database/
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
http://www.dbmsmag.com/9604d06.html

A simple node insert or delete operation in the tree has a good chance 
of changing 50% of the lft/rgt values in the entire tree.

Any sql operation that changes these values must:

1) lock the table
2) get the node and it's valid lft/rgt values
3) do the operation
4) unlock the tree

The only reliable property for a node in the tree is the $this->id which 
is the record id in the table.

There is also a $this->parent_id in each node that represents the 
immediate parent record id of that child node. There are times where 
it's just more convenient to do things the Adjacency List way.

-- 
Code Is Freedom
Burt Adsit



More information about the buddypress-dev mailing list