Yeah, I can do a trigger if I can't improve the functions. But I don't think that I can simplify them.
PathSort sorts mailboxes so that Inbox is followed by Sent, Views and the rest of the mailboxes:
CREATE OR REPLACE FUNCTION PathSort(thePath STRING) RETURNS STRING
BEGIN
CASE
WHEN LOWER(list_nthitem(thePath, 1, ':::')) = 'inbox' THEN
RETURN CONCAT('1:', REPLACE(thePath, ':::', CHAR(10)));
WHEN LOWER(list_nthitem(thePath, 1, ':::')) = 'sent' THEN
RETURN CONCAT('2:', REPLACE(thePath, ':::', CHAR(10)));
WHEN LOWER(list_nthitem(thePath, 1, ':::')) = 'sent messages' THEN
RETURN CONCAT('2:', REPLACE(thePath, ':::', CHAR(10)));
WHEN thePath = 'Trash' THEN
RETURN CONCAT('7:', REPLACE(thePath, ':::', CHAR(10)));
WHEN thePath = 'Spam' THEN
RETURN CONCAT('3:', REPLACE(thePath, ':::', CHAR(10)));
WHEN LOWER(list_nthitem(thePath, 1, ':::')) = 'views' THEN
RETURN CONCAT('4:', REPLACE(thePath, ':::', CHAR(10)));
WHEN LOWER(list_nthitem(thePath, 1, ':::')) = 'Mailboxes' THEN
RETURN CONCAT('5:', REPLACE(thePath, ':::', CHAR(10)));
ELSE
RETURN CONCAT('6:', REPLACE(thePath, ':::', CHAR(10)));
END CASE;
END
And MailboxPathNatSort is a custom natural sort:
CASE
WHEN RIGHT(list_nthitem(MailboxPath, 1, ':::'), 1) = 0 AND RIGHT(list_nthitem(MailboxPath, 1, ':::'), 2) = 0 AND RIGHT(list_nthitem(MailboxPath, 1, ':::'), 3) = 0 THEN
MailboxPath
WHEN RIGHT(list_nthitem(MailboxPath, 1, ':::'), 3) > 0 AND RIGHT(list_nthitem(MailboxPath, 1, ':::'), 3) = TRIM(RIGHT(list_nthitem(MailboxPath, 1, ':::'), 3)) THEN
REPLACE(MailboxPath, list_nthitem(MailboxPath, 1, ':::'), REPLACE(list_nthitem(MailboxPath, 1, ':::'), RIGHT(list_nthitem(MailboxPath, 1, ':::'), 3), CONCAT('00', RIGHT(list_nthitem(MailboxPath, 1, ':::'), 3))))
WHEN RIGHT(list_nthitem(MailboxPath, 1, ':::'), 2) > 0 AND RIGHT(list_nthitem(MailboxPath, 1, ':::'), 2) = TRIM(RIGHT(list_nthitem(MailboxPath, 1, ':::'), 2)) THEN
REPLACE(MailboxPath, list_nthitem(MailboxPath, 1, ':::'), REPLACE(list_nthitem(MailboxPath, 1, ':::'), RIGHT(list_nthitem(MailboxPath, 1, ':::'), 2), CONCAT('000', RIGHT(list_nthitem(MailboxPath, 1, ':::'), 2))))
WHEN RIGHT(list_nthitem(MailboxPath, 1, ':::'), 1) > 0 AND RIGHT(list_nthitem(MailboxPath, 1, ':::'), 1) = TRIM(RIGHT(list_nthitem(MailboxPath, 1, ':::'), 1)) THEN
REPLACE(MailboxPath, list_nthitem(MailboxPath, 1, ':::'), REPLACE(list_nthitem(MailboxPath, 1, ':::'), RIGHT(list_nthitem(MailboxPath, 1, ':::'), 1), CONCAT('0000', RIGHT(list_nthitem(MailboxPath, 1, ':::'), 1))))
END