open Util Sql Config
structure C = PgClient
+fun nullableFromSql f x =
+ if C.isNull x then
+ NONE
+ else
+ SOME (f x)
+fun nullableToSql f x =
+ case x of
+ NONE => "NULL"
+ | SOME x => f x
+
exception Access of string
exception NeedTos
val close = C.close
type user = {id : int, name : string, rname : string, bal : int, joined : C.timestamp,
- app : int, shares : int}
+ app : int, shares : int, paypal : string option, checkout : string option }
val db = ref (NONE : C.conn option)
val user = ref (NONE : user option)
fun getDb () = valOf (!db)
-fun mkUserRow [id, name, rname, bal, joined, app, shares] =
+fun mkUserRow [id, name, rname, bal, joined, app, shares, paypal, checkout] =
{id = C.intFromSql id, name = C.stringFromSql name, rname = C.stringFromSql rname,
bal = C.intFromSql bal, joined = C.timestampFromSql joined,
- app = C.intFromSql app, shares = C.intFromSql shares}
+ app = C.intFromSql app, shares = C.intFromSql shares,
+ paypal = nullableFromSql C.stringFromSql paypal,
+ checkout = nullableFromSql C.stringFromSql checkout}
| mkUserRow row = rowError ("user", row)
fun init () =
else
name
in
- case C.oneOrNoRows c ($`SELECT id, name, rname, bal, joined, app, shares
+ case C.oneOrNoRows c ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
FROM WebUserActive
WHERE name=^(C.stringToSql name)`) of
NONE => raise Fail "User not found"
fun getUserName () = #name (getUser ())
fun lookupUser id =
- mkUserRow (C.oneRow (getDb ()) ($`SELECT id, name, rname, bal, joined, app, shares
+ mkUserRow (C.oneRow (getDb ()) ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
FROM WebUser
WHERE id = ^(C.intToSql id)`))
fun listUsers () =
- C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
FROM WebUser
ORDER BY name`)
fun listActiveUsers () =
- C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
FROM WebUserActive
ORDER BY name`)
val db = getDb ()
val id = nextSeq (db, "WebUserSeq")
in
- C.dml db ($`INSERT INTO WebUser (id, name, rname, bal, joined, app, shares)
+ C.dml db ($`INSERT INTO WebUser (id, name, rname, bal, joined, app, shares, paypal, checkout)
VALUES (^(C.intToSql id), ^(C.stringToSql name), ^(C.stringToSql rname), ^(C.intToSql bal),
- CURRENT_TIMESTAMP, ^(C.intToSql app), ^(C.intToSql shares))`);
+ CURRENT_TIMESTAMP, ^(C.intToSql app), ^(C.intToSql shares),
+ (SELECT paypal FROM MemberApp WHERE id = ^(C.intToSql app)),
+ (SELECT checkout FROM MemberApp WHERE id = ^(C.intToSql app)))`);
id
end
ignore (C.dml db ($`UPDATE WebUser SET
name = ^(C.stringToSql (#name user)), rname = ^(C.stringToSql (#rname user)),
bal = ^(C.intToSql (#bal user)), app = ^(C.intToSql (#app user)),
- shares = ^(C.intToSql (#shares user))
+ shares = ^(C.intToSql (#shares user)),
+ paypal = ^(nullableToSql (C.stringToSql o Util.normEmail) (#paypal user)),
+ checkout = ^(nullableToSql (C.stringToSql o Util.normEmail) (#checkout user))
WHERE id = ^(C.intToSql (#id user))`))
end
fun byPledge () =
- C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
FROM WebUser
WHERE shares > 1
ORDER BY shares DESC, name`)
List.map OS.Path.file acc
end
+fun searchPaypal paypal =
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
+ FROM WebUser
+ WHERE paypal = ^(C.stringToSql (normEmail paypal))
+ ORDER BY name`)
+
+fun searchCheckout checkout =
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
+ FROM WebUser
+ WHERE checkout = ^(C.stringToSql (normEmail checkout))
+ ORDER BY name`)
+
end