SQL functions for tags
Tags in Manitou-mail are hierarchical, for several reasons such as the ability to mimic folders. There are pros and cons of this choice, but from the point of view of SQL querying, tree-like structures are clearly more complicated than flat structures. Here are two functions in the wiki that could be of help to compare tags across hierarchies:
- tag_path(tag_id) returns the full hierarchical path of a tag, with -> as the separator between branches.
- tag_depth(tag_id) returns the depth of the tag inside its hierarchy, starting at 1
As an example of use, in the custom queries of the user interface, we could use this query:
select mail_id from mail_tags mt join tags t on (mt.tag=t.tag_id) where tag_path(t.tag_id) ilike 'ParentTag->%'
to retrieve any message tagged with any tag whose top-level ancestor is ‘ParentTag’, no matter how deep the tag is inside the hierarchy (child, grandchild, grand grandchild…)