structure Contact :> CONTACT = struct structure C = PgClient fun main _ = let val db = C.conn "dbname='hcoop_hcoop'" fun allEmails () = let fun s [v] = C.stringFromSql v | s _ = raise Fail "Bad allEmails row" in C.map db s "SELECT v FROM Contact JOIN ContactKind ON knd = ContactKind.id AND ContactKind.name = 'Non-HCoop e-mail' ORDER BY v" end fun kindRow [id, name, url, urlPrefix, urlPostfix] = {id = C.intFromSql id, name = C.stringFromSql name, url = if C.boolFromSql url then SOME (C.stringFromSql urlPrefix, C.stringFromSql urlPostfix) else NONE} | kindRow _ = raise Fail "Bad ContactKind row" val kinds = C.map db kindRow "SELECT id, name, url, urlPrefix, urlPostfix FROM ContactKind ORDER BY name" fun doOne (kind : {id : int, name : string, url : (string * string) option}) = let fun doOne [name, v] = let val name = C.stringFromSql name val v = C.stringFromSql v in print "