···99let open_or_create ~sw path =
1010 try Sqlite.open_ ~sw path with _ -> Sqlite.v ~sw path
11111212+let write_entry t (k, v) =
1313+ Log.info (fun m -> m "put %s=%s" k v);
1414+ Sqlite.put t k v
1515+1216let write () db pairs =
1317 Eio_main.run @@ fun env ->
1418 let cwd = Eio.Stdenv.cwd env in
1519 Eio.Switch.run @@ fun sw ->
1620 let path = Eio.Path.(cwd / db) in
1721 let t = open_or_create ~sw path in
1818- List.iter
1919- (fun (k, v) ->
2020- Log.info (fun m -> m "put %s=%s" k v);
2121- Sqlite.put t k v)
2222- pairs;
2222+ List.iter (write_entry t) pairs;
2323 Sqlite.close t;
2424 Log.info (fun m -> m "wrote %d entries to %s" (List.length pairs) db)
2525···153153154154(* -- delete subcommand -- *)
155155156156+let delete_entry t k =
157157+ Log.info (fun m -> m "delete %s" k);
158158+ Sqlite.delete t k
159159+156160let delete () db keys =
157161 Eio_main.run @@ fun env ->
158162 let cwd = Eio.Stdenv.cwd env in
159163 Eio.Switch.run @@ fun sw ->
160164 let path = Eio.Path.(cwd / db) in
161165 let t = Sqlite.open_ ~sw path in
162162- List.iter
163163- (fun k ->
164164- Log.info (fun m -> m "delete %s" k);
165165- Sqlite.delete t k)
166166- keys;
166166+ List.iter (delete_entry t) keys;
167167 Sqlite.close t;
168168 Log.info (fun m -> m "deleted %d entries from %s" (List.length keys) db)
169169···192192193193(* -- tables subcommand -- *)
194194195195+let pp_column (c : Sqlite.column) =
196196+ let base =
197197+ if c.col_affinity = "" then c.col_name
198198+ else c.col_name ^ " " ^ c.col_affinity
199199+ in
200200+ if c.col_is_rowid_alias then base ^ " PRIMARY KEY" else base
201201+202202+let pp_schema (s : Sqlite.schema) =
203203+ let cols = List.map pp_column s.columns in
204204+ Fmt.pr "%s (%s)@." s.tbl_name (String.concat ", " cols)
205205+195206let tables () db =
196207 Eio_main.run @@ fun env ->
197208 let cwd = Eio.Stdenv.cwd env in
198209 Eio.Switch.run @@ fun sw ->
199210 let path = Eio.Path.(cwd / db) in
200211 let t = Sqlite.open_ ~sw path in
201201- let schemas = Sqlite.tables t in
202202- List.iter
203203- (fun (s : Sqlite.schema) ->
204204- let cols =
205205- List.map
206206- (fun (c : Sqlite.column) ->
207207- let base =
208208- if c.col_affinity = "" then c.col_name
209209- else c.col_name ^ " " ^ c.col_affinity
210210- in
211211- if c.col_is_rowid_alias then base ^ " PRIMARY KEY" else base)
212212- s.columns
213213- in
214214- Fmt.pr "%s (%s)@." s.tbl_name (String.concat ", " cols))
215215- schemas;
212212+ List.iter pp_schema (Sqlite.tables t);
216213 Sqlite.close t
217214218215let tables_cmd =
+4-4
test/test_sqlite.ml
···691691 Alcotest.(check (list string)) "table names" [ "t1"; "t2" ] names;
692692 Sqlite.close t
693693694694+let sum_int_values _rowid values acc =
695695+ match values with [ Sqlite.Vint n ] -> Int64.add acc n | _ -> acc
696696+694697let test_fold_table () =
695698 with_temp_path @@ fun _env fpath path ->
696699 let rc =
···704707 if rc <> 0 then Alcotest.skip ();
705708 Eio.Switch.run @@ fun sw ->
706709 let t = Sqlite.open_ ~sw path in
707707- let sum =
708708- Sqlite.fold_table t "nums" ~init:0L ~f:(fun _rowid values acc ->
709709- match values with [ Sqlite.Vint n ] -> Int64.add acc n | _ -> acc)
710710- in
710710+ let sum = Sqlite.fold_table t "nums" ~init:0L ~f:sum_int_values in
711711 Alcotest.(check int64) "sum of values" 60L sum;
712712 Sqlite.close t
713713