From e1d539e893a539971f768129386e11028d8e853c Mon Sep 17 00:00:00 2001 From: traxys Date: Mon, 9 Oct 2023 16:36:35 +0200 Subject: [PATCH] Rework stalwart queries --- queries.md | 65 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/queries.md b/queries.md index 1729376..d8ac383 100644 --- a/queries.md +++ b/queries.md @@ -5,9 +5,18 @@ 100 GB quota ```sql -SELECT name, 'individual' as type, password as secret, '' as description, 107374182400 as quota -FROM accounts -WHERE secret != NULL AND name = ? +SELECT + mail as name, + 'individual' as type, + password as secret, + '' as description, + 107374182400 as quota +FROM emails + JOIN accounts ON emails.id = accounts.id +WHERE + type = 'primary' + AND mail = ? + AND password IS NOT NULL ``` ## members @@ -19,47 +28,51 @@ SELECT NULL as member_of WHERE 1=0 ## recipients ```sql -SELECT name -FROM emails JOIN accounts on emails.id = accounts.id -WHERE mail = ? + SELECT dest as name FROM alias WHERE alias = ? +UNION + SELECT mail as name + FROM emails + WHERE id = (SELECT id FROM emails WHERE type = 'list' AND mail = ?) + AND type = 'primary' +UNION + SELECT mail as name FROM emails WHERE mail = ? ``` ## emails ```sql -SELECT mail as address -FROM ( - SELECT name || '@familleboyer.net' as mail, 0 as type FROM accounts WHERE name = ? - UNION - SELECT mail, (alias)::int + 1 as type - FROM emails JOIN accounts ON accounts.id = emails.id - WHERE name = ? -) as mails -ORDER BY type +SELECT mais as address +FROM emails +WHERE + (id = (SELECT id FROM emails WHERE mail = ?) AND type = 'alias') + OR mail = ? +ORDER BY type, mail ``` ## verify ```sql -SELECT mail as address -FROM ( - SELECT name || '@familleboyer.net' as mail FROM accounts - UNION - SELECT mail - FROM emails JOIN accounts ON accounts.id = emails.id - WHERE NOT alias -) as mails -WHERE mail LIKE '%' || ? || '%' ORDER BY mail LIMIT 5 +SELECT mail as address +FROM emails +WHERE + mail LIKE '%' || ? || '%' + AND type = 'primary' +ORDER BY address +LIMIT 5 ``` ## expand ```sql -SELECT NULL as address WHERE 1=0 +SELECT recipient as address +FROM list_recipients +WHERE list = ? +ORDER BY address +LIMIT 50 ``` ## domains ```sql -SELECT 1 WHERE ? = 'familleboyer.net' +SELECT 1 FROM emails WHERE mail LIKE '%@' || ? LIMIT 1 ```