fun mkGroupRow [id, name] =
{id = C.intFromSql id, name = C.stringFromSql name}
- | mkGroupRow row = raise Fail ("Bad group row : " ^ makeSet id row)
+ | mkGroupRow row = Init.rowError ("group", row)
fun addGroup name =
let
val id = nextSeq (db, "WebGroupSeq")
in
C.dml db ($`INSERT INTO WebGroup (id, name)
- VALUES (^id, ^(C.stringToSql name))`);
- C.intFromSql id
+ VALUES (^(C.intToSql id), ^(C.stringToSql name))`);
+ id
end
fun lookupGroup id =
in
(case C.oneOrNoRows c ($`SELECT COUNT( * )
FROM Membership
- WHERE grp = ^(C.intToSql grp)
+ WHERE (grp IN (0, ^(C.intToSql grp)))
AND usr = ^(C.intToSql usr)`) of
- SOME[x] => x <> "0"
+ SOME[x] => not (C.isNull x) andalso C.intFromSql x <> 0
| _ => false)
end
in
(case C.oneOrNoRows c ($`SELECT COUNT( * )
FROM Membership, WebGroup
- WHERE name = ^(C.stringToSql grp)
- AND usr = ^(C.intToSql usr)
- AND grp = id`) of
- SOME[x] => x <> "0"
+ WHERE (grp = 0 OR (name = ^(C.stringToSql grp) AND grp = id))
+ AND usr = ^(C.intToSql usr)`) of
+ SOME[x] => not (C.isNull x) andalso C.intFromSql x <> 0
| _ => false)
end
val usr = #usr mem
val grp = #grp mem
in
- if userInGroupNum (usr, grp) then
- ()
- else
- ignore (C.dml (getDb ()) ($`INSERT INTO Membership (grp, usr)
- VALUES (^(C.intToSql grp), ^(C.intToSql usr))`))
+ case C.oneOrNoRows (getDb ()) ($`SELECT * FROM Membership WHERE grp = ^(C.intToSql grp) AND usr = ^(C.intToSql usr)`) of
+ NONE => ignore (C.dml (getDb ()) ($`INSERT INTO Membership (grp, usr)
+ VALUES (^(C.intToSql grp), ^(C.intToSql usr))`))
+ | SOME _ => ()
end
fun addToGroups (usr, grps) =
fun mkMembershipRow [grp, usr] =
{grp = C.intFromSql grp, usr = C.intFromSql usr}
- | mkMembershipRow row = raise Fail ("Bad membership row : " ^ makeSet id row)
+ | mkMembershipRow row = Init.rowError ("membership", row)
fun groupMembers grp =
- C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined FROM Membership, WebUser
+ C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares FROM Membership, WebUser
WHERE grp = ^(C.intToSql grp)
AND usr = id
ORDER BY name`)
SOME [id] => SOME (C.intFromSql id)
| _ => NONE
-end
\ No newline at end of file
+end