caml: distinguish "one" and "zero or one' cardinalities
[sqlgg.git] / demo / demo_caml_mysql.ml
blobc6fcdf56032b24c9a5dff9c0beba492ce76d46ff
2 open Printf
3 module M = Mysql
5 module G = Demo_caml_gen_mysql.Sqlgg(Sqlgg_mysql.Make(Int64))
7 let main () =
8 let db = M.quick_connect ~database:"test" ~user:"root" () in
10 G.drop_person db;
11 G.drop_money db;
13 (* create tables *)
14 G.create_person db;
15 G.create_money db;
17 (* add all person records *)
18 G.add_person db "John" "Black";
19 let john = M.insert_id db in
20 G.add_person db "Ivan" "Petrov";
21 let ivan = M.insert_id db in
22 G.add_person db "Sancho" "Alvares";
23 let sancho = M.insert_id db in
25 (* add money relations *)
26 G.add_money db john ivan 200L;
27 G.add_money db ~src:john ~dst:sancho ~amount:100L;
28 G.add_money db ~amount:250L ~dst:sancho ~src:john;
29 G.add_money db sancho ivan 300L;
31 (* summarize by person and output *)
32 print_endline "Total transfers:";
33 G.calc_total db (fun ~fullname ~total -> printf "%s = %Lu\n" fullname total);
35 (* list donors *)
36 print_endline "Donors:";
37 G.list_donors db "petrov" 100L (fun ~surname -> print_endline (match surname with Some s -> s | None -> "<unknown>"));
39 (* properly close database *)
40 M.disconnect db;
44 let () = Printexc.print main ()