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: tag_path()
and tag_depth()
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…)