···1818 let value = truncate value in
1919 let db = Sqlite.in_memory () in
2020 Sqlite.put db key value;
2121- let result = Sqlite.get db key in
2121+ let result = Sqlite.find db key in
2222 check_eq ~pp:Format.pp_print_string ~eq:( = ) (Option.get result) value
23232424(** Delete removes key. *)
···2828 let db = Sqlite.in_memory () in
2929 Sqlite.put db key value;
3030 Sqlite.delete db key;
3131- check (Option.is_none (Sqlite.get db key))
3131+ check (Option.is_none (Sqlite.find db key))
32323333(** mem consistent with get. *)
3434let test_mem_consistent key value =
···3737 let db = Sqlite.in_memory () in
3838 Sqlite.put db key value;
3939 check_eq ~pp:Format.pp_print_bool (Sqlite.mem db key)
4040- (Option.is_some (Sqlite.get db key))
4040+ (Option.is_some (Sqlite.find db key))
41414242(** Overwrite replaces value - last put wins. *)
4343let test_overwrite key value1 value2 =
···4848 Sqlite.put db key value1;
4949 Sqlite.put db key value2;
5050 check_eq ~pp:Format.pp_print_string ~eq:( = )
5151- (Option.get (Sqlite.get db key))
5151+ (Option.get (Sqlite.find db key))
5252 value2
53535454(* Table operations *)
···6464 Sqlite.Table.put t1 key value1;
6565 Sqlite.Table.put t2 key value2;
6666 check_eq ~pp:Format.pp_print_string ~eq:( = )
6767- (Option.get (Sqlite.Table.get t1 key))
6767+ (Option.get (Sqlite.Table.find t1 key))
6868 value1;
6969 check_eq ~pp:Format.pp_print_string ~eq:( = )
7070- (Option.get (Sqlite.Table.get t2 key))
7070+ (Option.get (Sqlite.Table.find t2 key))
7171 value2
72727373(** Table roundtrip. *)
···7878 let t = Sqlite.Table.create db ~name:"test" in
7979 Sqlite.Table.put t key value;
8080 check_eq ~pp:Format.pp_print_string ~eq:( = )
8181- (Option.get (Sqlite.Table.get t key))
8181+ (Option.get (Sqlite.Table.find t key))
8282 value
83838484(* Crash safety *)
···9494let test_get_crash key =
9595 let key = truncate key in
9696 let db = Sqlite.in_memory () in
9797- try ignore (Sqlite.get db key) with _ -> ()
9797+ try ignore (Sqlite.find db key) with _ -> ()
98989999(** Delete must not crash on arbitrary key. *)
100100let test_delete_crash key =
···116116 let db = Sqlite.in_memory () in
117117 Sqlite.put db "" value;
118118 check_eq ~pp:Format.pp_print_string ~eq:( = )
119119- (Option.get (Sqlite.get db ""))
119119+ (Option.get (Sqlite.find db ""))
120120 value
121121122122(** Empty value must work. *)
···125125 let db = Sqlite.in_memory () in
126126 Sqlite.put db key "";
127127 check_eq ~pp:Format.pp_print_string ~eq:( = )
128128- (Option.get (Sqlite.get db key))
128128+ (Option.get (Sqlite.find db key))
129129 ""
130130131131(** Both empty must work. *)
···133133 let db = Sqlite.in_memory () in
134134 Sqlite.put db "" "";
135135 check_eq ~pp:Format.pp_print_string ~eq:( = )
136136- (Option.get (Sqlite.get db ""))
136136+ (Option.get (Sqlite.find db ""))
137137 ""
138138139139(* Sequence operations *)
···148148 List.iter (fun v -> Sqlite.put db key v) values;
149149 let last = List.hd (List.rev values) in
150150 check_eq ~pp:Format.pp_print_string ~eq:( = )
151151- (Option.get (Sqlite.get db key))
151151+ (Option.get (Sqlite.find db key))
152152 last
153153 end
154154···162162 Sqlite.delete db key;
163163 Sqlite.put db key value2;
164164 check_eq ~pp:Format.pp_print_string ~eq:( = )
165165- (Option.get (Sqlite.get db key))
165165+ (Option.get (Sqlite.find db key))
166166 value2
167167168168(* Register all tests *)
+3-3
lib/sqlite.ml
···9999 in
100100 { pager; index; tables = Hashtbl.create 8 }
101101102102-let get t key =
102102+let find t key =
103103 let prefix = prefix key in
104104 match Btree.Index.by_prefix t.index prefix with
105105 | None -> None
···170170 (* Check if table metadata exists in main index *)
171171 let meta_key = "__table__" ^ name in
172172 let index =
173173- match get parent meta_key with
173173+ match find parent meta_key with
174174 | Some meta_value when String.length meta_value >= 4 ->
175175 let root = decode_u32_be meta_value 0 in
176176 Btree.Index.open_ parent.pager ~root_page:root
···186186 Hashtbl.replace parent.tables name (index, root);
187187 { parent; name; index }
188188189189- let get t key =
189189+ let find t key =
190190 let prefix = prefix key in
191191 match Btree.Index.by_prefix t.index prefix with
192192 | None -> None
+4-4
lib/sqlite.mli
···2525 controls the lifetime of the underlying file handle.
2626 @raise Failure if the file doesn't exist. *)
27272828-val get : t -> string -> string option
2929-(** [get t key] returns the value for [key], or [None] if not found. *)
2828+val find : t -> string -> string option
2929+(** [find t key] returns the value for [key], or [None] if not found. *)
30303131val put : t -> string -> string -> unit
3232(** [put t key value] stores [value] at [key], replacing any existing value. *)
···6464 (** [create db ~name] creates or opens a table named [name] within [db]. The
6565 table name must be a valid SQL identifier. *)
66666767- val get : t -> string -> string option
6868- (** [get t key] returns the value for [key], or [None]. *)
6767+ val find : t -> string -> string option
6868+ (** [find t key] returns the value for [key], or [None]. *)
69697070 val put : t -> string -> string -> unit
7171 (** [put t key value] stores [value] at [key]. *)
+33-33
test/test_sqlite.ml
···2121let test_put_get () =
2222 with_temp_db @@ fun _fs db ->
2323 Sqlite.put db "key1" "value1";
2424- let result = Sqlite.get db "key1" in
2424+ let result = Sqlite.find db "key1" in
2525 Alcotest.(check (option string))
2626 "get returns put value" (Some "value1") result
27272828let test_get_missing () =
2929 with_temp_db @@ fun _fs db ->
3030- let result = Sqlite.get db "nonexistent" in
3030+ let result = Sqlite.find db "nonexistent" in
3131 Alcotest.(check (option string)) "missing key returns None" None result
32323333let test_put_overwrite () =
3434 with_temp_db @@ fun _fs db ->
3535 Sqlite.put db "key1" "value1";
3636 Sqlite.put db "key1" "value2";
3737- let result = Sqlite.get db "key1" in
3737+ let result = Sqlite.find db "key1" in
3838 Alcotest.(check (option string)) "overwrite works" (Some "value2") result
39394040let test_delete () =
4141 with_temp_db @@ fun _fs db ->
4242 Sqlite.put db "key1" "value1";
4343 Sqlite.delete db "key1";
4444- let result = Sqlite.get db "key1" in
4444+ let result = Sqlite.find db "key1" in
4545 Alcotest.(check (option string)) "delete removes key" None result
46464747let test_delete_missing () =
···8383 with_temp_db @@ fun _fs db ->
8484 let binary = "\x00\x01\x02\xff\xfe\xfd" in
8585 Sqlite.put db "binary" binary;
8686- let result = Sqlite.get db "binary" in
8686+ let result = Sqlite.find db "binary" in
8787 Alcotest.(check (option string)) "binary data preserved" (Some binary) result
88888989let test_empty_value () =
9090 with_temp_db @@ fun _fs db ->
9191 Sqlite.put db "empty" "";
9292- let result = Sqlite.get db "empty" in
9292+ let result = Sqlite.find db "empty" in
9393 Alcotest.(check (option string)) "empty value works" (Some "") result
94949595let test_large_value () =
···9797 (* Note: B-tree has page splitting constraints limiting max entry size *)
9898 let large = String.make 1000 'x' in
9999 Sqlite.put db "large" large;
100100- let result = Sqlite.get db "large" in
100100+ let result = Sqlite.find db "large" in
101101 Alcotest.(check (option string)) "large value works" (Some large) result
102102103103(* Namespaced tables *)
···106106 with_temp_db @@ fun _fs db ->
107107 let table = Sqlite.Table.create db ~name:"blocks" in
108108 Sqlite.Table.put table "cid1" "data1";
109109- let result = Sqlite.Table.get table "cid1" in
109109+ let result = Sqlite.Table.find table "cid1" in
110110 Alcotest.(check (option string)) "table get/put works" (Some "data1") result
111111112112let test_table_isolation () =
···119119 Sqlite.put db "key" "default";
120120 Alcotest.(check (option string))
121121 "t1 isolated" (Some "value1")
122122- (Sqlite.Table.get t1 "key");
122122+ (Sqlite.Table.find t1 "key");
123123 Alcotest.(check (option string))
124124 "t2 isolated" (Some "value2")
125125- (Sqlite.Table.get t2 "key");
125125+ (Sqlite.Table.find t2 "key");
126126 Alcotest.(check (option string))
127127- "default isolated" (Some "default") (Sqlite.get db "key")
127127+ "default isolated" (Some "default") (Sqlite.find db "key")
128128129129let test_table_mem_delete () =
130130 with_temp_db @@ fun _fs db ->
···164164 List.iter
165165 (fun key ->
166166 Sqlite.put db key "value";
167167- let result = Sqlite.get db key in
167167+ let result = Sqlite.find db key in
168168 Alcotest.(check (option string))
169169 (Printf.sprintf "injection key %S safe" key)
170170 (Some "value") result)
···178178 List.iter
179179 (fun value ->
180180 Sqlite.put db "key" value;
181181- let result = Sqlite.get db "key" in
181181+ let result = Sqlite.find db "key" in
182182 Alcotest.(check (option string))
183183 (Printf.sprintf "injection value safe")
184184 (Some value) result)
···214214 (fun name ->
215215 let table = Sqlite.Table.create db ~name in
216216 Sqlite.Table.put table "key" "value";
217217- let result = Sqlite.Table.get table "key" in
217217+ let result = Sqlite.Table.find table "key" in
218218 Alcotest.(check (option string))
219219 (Printf.sprintf "valid table %S works" name)
220220 (Some "value") result)
···228228 List.iter
229229 (fun key ->
230230 Sqlite.put db key "value";
231231- let result = Sqlite.get db key in
231231+ let result = Sqlite.find db key in
232232 Alcotest.(check (option string))
233233 (Printf.sprintf "unicode key %S" key)
234234 (Some "value") result)
···238238 with_temp_db @@ fun _fs db ->
239239 let unicode = "日本語テスト🎉" in
240240 Sqlite.put db "key" unicode;
241241- let result = Sqlite.get db "key" in
241241+ let result = Sqlite.find db "key" in
242242 Alcotest.(check (option string)) "unicode value" (Some unicode) result
243243244244(* Sync *)
···248248 Sqlite.put db "key" "value";
249249 (* sync should not raise *)
250250 Sqlite.sync db;
251251- let result = Sqlite.get db "key" in
251251+ let result = Sqlite.find db "key" in
252252 Alcotest.(check (option string))
253253 "data persists after sync" (Some "value") result
254254···271271 (* Reopen and read *)
272272 Eio.Switch.run (fun sw ->
273273 let db = Sqlite.open_ ~sw path in
274274- let r1 = Sqlite.get db "key1" in
275275- let r2 = Sqlite.get db "key2" in
274274+ let r1 = Sqlite.find db "key1" in
275275+ let r2 = Sqlite.find db "key2" in
276276 Alcotest.(check (option string)) "key1 persisted" (Some "value1") r1;
277277 Alcotest.(check (option string)) "key2 persisted" (Some "value2") r2;
278278 Sqlite.close db)
···296296 (* Reopen and verify *)
297297 Eio.Switch.run (fun sw ->
298298 let db = Sqlite.open_ ~sw path in
299299- let r1 = Sqlite.get db "keep" in
300300- let r2 = Sqlite.get db "delete" in
299299+ let r1 = Sqlite.find db "keep" in
300300+ let r2 = Sqlite.find db "delete" in
301301 Alcotest.(check (option string)) "kept key persisted" (Some "value1") r1;
302302 Alcotest.(check (option string)) "deleted key gone" None r2;
303303 Sqlite.close db)
···324324 let db = Sqlite.open_ ~sw path in
325325 let t1 = Sqlite.Table.create db ~name:"blocks" in
326326 let t2 = Sqlite.Table.create db ~name:"refs" in
327327- let r1 = Sqlite.Table.get t1 "cid1" in
328328- let r2 = Sqlite.Table.get t2 "head" in
327327+ let r1 = Sqlite.Table.find t1 "cid1" in
328328+ let r2 = Sqlite.Table.find t2 "head" in
329329 Alcotest.(check (option string)) "table1 data persisted" (Some "data1") r1;
330330 Alcotest.(check (option string))
331331 "table2 data persisted" (Some "cid123") r2;
···336336let test_empty_key () =
337337 with_temp_db @@ fun _fs db ->
338338 Sqlite.put db "" "value_for_empty_key";
339339- let result = Sqlite.get db "" in
339339+ let result = Sqlite.find db "" in
340340 Alcotest.(check (option string))
341341 "empty key works" (Some "value_for_empty_key") result
342342···345345 let key = "key\x00with\x00nulls" in
346346 let value = "value\x00also\x00has\x00nulls" in
347347 Sqlite.put db key value;
348348- let result = Sqlite.get db key in
348348+ let result = Sqlite.find db key in
349349 Alcotest.(check (option string)) "null bytes preserved" (Some value) result
350350351351let test_long_key () =
···354354 let key = String.make 500 'k' in
355355 let value = "value" in
356356 Sqlite.put db key value;
357357- let result = Sqlite.get db key in
357357+ let result = Sqlite.find db key in
358358 Alcotest.(check (option string)) "long key works" (Some value) result
359359360360let test_all_byte_values () =
···362362 (* Test all possible byte values in keys and values *)
363363 let all_bytes = String.init 256 Char.chr in
364364 Sqlite.put db all_bytes all_bytes;
365365- let result = Sqlite.get db all_bytes in
365365+ let result = Sqlite.find db all_bytes in
366366 Alcotest.(check (option string))
367367 "all byte values preserved" (Some all_bytes) result
368368···375375 let key = String.make len 'x' in
376376 let value = Printf.sprintf "value_%d" len in
377377 Sqlite.put db key value;
378378- let result = Sqlite.get db key in
378378+ let result = Sqlite.find db key in
379379 Alcotest.(check (option string))
380380 (Printf.sprintf "key length %d" len)
381381 (Some value) result)
···392392 done;
393393 (* Verify all present *)
394394 for i = 0 to n - 1 do
395395- let result = Sqlite.get db (Printf.sprintf "key_%05d" i) in
395395+ let result = Sqlite.find db (Printf.sprintf "key_%05d" i) in
396396 Alcotest.(check (option string))
397397 (Printf.sprintf "key %d present" i)
398398 (Some (Printf.sprintf "value_%d" i))
···406406 for i = 0 to n - 1 do
407407 Sqlite.put db "key" (Printf.sprintf "value_%d" i)
408408 done;
409409- let result = Sqlite.get db "key" in
409409+ let result = Sqlite.find db "key" in
410410 Alcotest.(check (option string))
411411 "final value"
412412 (Some (Printf.sprintf "value_%d" (n - 1)))
···446446 (* Verify isolation *)
447447 Array.iteri
448448 (fun i t ->
449449- let result = Sqlite.Table.get t "key" in
449449+ let result = Sqlite.Table.find t "key" in
450450 Alcotest.(check (option string))
451451 (Printf.sprintf "table %d" i)
452452 (Some (Printf.sprintf "value_%d" i))
···460460 (* Ensure large key doesn't cause integer overflow in length encoding *)
461461 let key = String.make 500 'x' in
462462 Sqlite.put db key "value";
463463- let result = Sqlite.get db key in
463463+ let result = Sqlite.find db key in
464464 Alcotest.(check (option string)) "large key no overflow" (Some "value") result
465465466466let test_cve_like_boundary_conditions () =
···472472 let key = Printf.sprintf "key_%d" size in
473473 let value = String.make size 'v' in
474474 Sqlite.put db key value;
475475- let result = Sqlite.get db key in
475475+ let result = Sqlite.find db key in
476476 Alcotest.(check (option string))
477477 (Printf.sprintf "boundary size %d" size)
478478 (Some value) result)