29c3cc58 |
1 | structure Link :> LINK = |
2 | struct |
3 | |
4 | open Util Sql Init |
5 | |
6 | type link = {id : int, usr : int, title : string, url : string, descr : string} |
7 | |
8 | fun mkLinkRow [id, usr, title, url, descr] = |
9 | {id = C.intFromSql id, usr = C.intFromSql usr, title = C.stringFromSql title, |
10 | url = C.stringFromSql url, descr = C.stringFromSql descr} |
11 | | mkLinkRow row = rowError ("link", row) |
12 | |
13 | fun lookupLink id = |
14 | mkLinkRow (C.oneRow (getDb ()) ($`SELECT id, usr, title, url, descr |
15 | FROM Link |
16 | WHERE id = ^(C.intToSql id)`)) |
17 | |
18 | fun mkLinkRow' (name :: rest) = (C.stringFromSql name, mkLinkRow rest) |
19 | | mkLinkRow' row = Init.rowError ("user'", row) |
20 | |
21 | fun listLinks () = |
22 | C.map (getDb ()) mkLinkRow' ($`SELECT name, Link.id, usr, title, url, descr |
23 | FROM Link JOIN WebUser ON usr = WebUser.id |
24 | ORDER BY title`) |
25 | |
26 | fun listUserLinks usr = |
27 | C.map (getDb ()) mkLinkRow ($`SELECT id, usr, title, url, descr |
28 | FROM Link |
29 | WHERE usr = ^(C.intToSql usr) |
30 | ORDER BY title`) |
31 | |
32 | fun addLink (usr, title, url, descr) = |
33 | let |
34 | val db = getDb () |
35 | val id = nextSeq (db, "LinkSeq") |
36 | in |
37 | C.dml db ($`INSERT INTO Link (id, usr, title, url, descr) |
38 | VALUES (^(C.intToSql id), ^(C.intToSql usr), ^(C.stringToSql title), ^(C.stringToSql url), ^(C.stringToSql descr))`); |
39 | id |
40 | end |
41 | |
42 | fun modLink (link : link) = |
43 | let |
44 | val db = getDb () |
45 | in |
46 | ignore (C.dml db ($`UPDATE Link SET |
47 | usr = ^(C.intToSql (#usr link)), title = ^(C.stringToSql (#title link)), |
48 | url = ^(C.stringToSql (#url link)), descr = ^(C.stringToSql (#descr link)) |
49 | WHERE id = ^(C.intToSql (#id link))`)) |
50 | end |
51 | |
52 | fun deleteLink id = |
53 | ignore (C.dml (getDb ()) ($`DELETE FROM Link WHERE id = ^(C.intToSql id)`)) |
54 | |
55 | end |