1 (* Implement subcommands for adding new tasks. *)
10 let parse_tags tags = nsplit "," tags
12 let insert_tags dbh taskid tags =
15 let rows = PGSQL(dbh) "select id from tags where name = $tag" in
18 | [] -> error "unknown tag: %s" tag
20 | _ -> assert false in
21 PGSQL(dbh) "insert into tags_tasks (tagid, taskid)
22 values ($id, $taskid)"
25 let cmd_todo dbh anon_params estimate =
26 let deadline, description, tags =
27 match anon_params with
28 | [deadline; description] ->
29 Printer.Date.from_string deadline, description, []
30 | [deadline; description; tags] ->
31 Printer.Date.from_string deadline, description, parse_tags tags
32 | _ -> error "incorrect number of parameters to 'todo' subcommand" in
34 PGOCaml.begin_work dbh;
36 PGSQL(dbh) "insert into tasks (description) values ($description)";
37 let taskid = PGOCaml.serial4 dbh "tasks_id_seq" in
38 PGSQL(dbh) "insert into todo (taskid, deadline, estimate)
39 values ($taskid, $deadline :: date, $?estimate)";
40 insert_tags dbh taskid tags;
44 let cmd_today dbh anon_params =
45 let description, tags =
46 match anon_params with
47 | [description] -> description, []
48 | [description; tags] ->
49 description, parse_tags tags
50 | _ -> error "incorrect number of parameters to 'today' subcommand" in
52 PGOCaml.begin_work dbh;
54 PGSQL(dbh) "insert into tasks (description) values ($description)";
55 let taskid = PGOCaml.serial4 dbh "tasks_id_seq" in
56 PGSQL(dbh) "insert into imminent (taskid) values ($taskid)";
57 insert_tags dbh taskid tags;
61 let cmd_idea dbh anon_params =
62 let description, tags =
63 match anon_params with
64 | [description] -> description, []
65 | [description; tags] ->
66 description, parse_tags tags
67 | _ -> error "incorrect number of parameters to 'idea' subcommand" in
69 PGOCaml.begin_work dbh;
71 PGSQL(dbh) "insert into tasks (description) values ($description)";
72 let taskid = PGOCaml.serial4 dbh "tasks_id_seq" in
73 PGSQL(dbh) "insert into ideas (taskid) values ($taskid)";
74 insert_tags dbh taskid tags;