Hi,
I'm experimenting with an email server, Mail In a Box. It's a free
product and gives you a mail server in a box with SSL certificates,
multiple domains and seems to work well.
One thing it doesn't do is allow people to specify emails to block.
It uses SQLite to store the underlying data necessary to power Postfix.
Dr Richard Hipp, add another new application to your list :)
I've worked out how Postfix calls SQLite (pretty easy), worked out what
I want to do, and am trying to write a single line of SQL that does it.
The need is that the SQL must generate a single string answer depending
on the email address that is fed in through the query. There are no
options here, it must return a value even if there is nothing in the
table. It is not practical to add a table with every email address that
returns OK.
For this example the only strings it can return are 'OK' and 'DISCARD',
though the RFC allows other strings. If a query is done on an email and
it is blocked then it must return DISCARD (or an action in the action
column. If no email is in the table matching then it must return 'OK'.
As a piece of pseudo code this would ne
function GetMailStatus(emailAddress)
{
IF emailAddress is present in blocked THEN
return action associated with emailAddress -- Action is normally
DISCARD
return 'OK'
}
I've created the table
CREATE TABLE blocked (id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT NOT NULL UNIQUE ,
action TEXT NOT NULL DEFAULT 'DISCARD')
I can insert values
insert into blocked (email) values('rwillett.dr...@example.com')
insert into blocked (email) values('rwillett+dr...@example.com')
And this is the code that I have written that works but it looks poor to
my untutored eyes
select CASE
WHEN EXISTS (select 1 from blocked where email =
'rwillett.dr...@example.com')
THEN (select action from blocked where email =
'rwillett.dr...@example.com')
ELSE 'OK'
END
In the Postfix query I'll replace
email = 'rwillett.dr...@example.com'
with email = '%s'
so that the email address is passed in.
My worry is that the query has two selects and 'feels' bad. It works but
feels dirty...
Is there a better way under SQLite?
Any suggestions welcomed.
Rob
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users