sql: better name for lexer hack
[sqlgg.git] / demo / demo_caml.ml
blob52810aed864f7d2313bf848bf0655c32dd660aa1
1 open Printf
2 open Sqlite3
4 module G = Demo_caml_gen.Sqlgg(Sqlgg_sqlite3)
6 let explain msg db = printf "%s : %s\n" msg (errmsg db)
8 let main () =
9 let db = db_open ":memory:" in
11 (* create tables *)
12 G.create_person db;
13 G.create_money db;
15 (* add all person records *)
16 G.add_person db "John" "Black";
17 let john = last_insert_rowid db in
18 G.add_person db "Ivan" "Petrov";
19 let ivan = last_insert_rowid db in
20 G.add_person db "Sancho" "Alvares";
21 let sancho = last_insert_rowid db in
23 (* add money relations *)
24 G.add_money db john ivan 200L;
25 G.add_money db ~src:john ~dst:sancho ~amount:100L;
26 G.add_money db ~amount:250L ~dst:sancho ~src:john;
27 G.add_money db sancho ivan 300L;
29 (* summarize by person and output *)
30 print_endline "Total transfers:";
31 G.calc_total db (fun ~fullname ~total -> printf "%s = %Lu\n" fullname total);
32 printf "Total total: %Lu\n" (G.Fold.calc_total db (fun ~fullname:_ ~total acc -> Int64.add acc total) 0L);
34 (* list donors *)
35 print_endline "Donors:";
36 G.list_donors db "petrov" 100L (fun ~surname -> print_endline (match surname with Some s -> s | None -> "<unknown>"));
38 (* properly close database *)
39 db_close db;
43 let _ = Printexc.print main ()