Minimal SQLite key-value store for OCaml
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(lint): resolve doc style, test conventions, and fmt issues across sle, space-packet, spake2, sqlite

+70 -74
+1 -1
lib/sqlite.ml
··· 58 58 59 59 (* Database operations *) 60 60 61 - let create ~sw path = 61 + let v ~sw path = 62 62 (* Create parent directory if needed *) 63 63 let parent = 64 64 match Eio.Path.split path with
+4 -4
lib/sqlite.mli
··· 11 11 type t 12 12 (** A B-tree backed key-value store. *) 13 13 14 - val create : sw:Eio.Switch.t -> Eio.Fs.dir_ty Eio.Path.t -> t 15 - (** [create ~sw path] creates a new database at [path]. If a file already exists 16 - at [path], it will be truncated. The switch [sw] controls the lifetime of 17 - the underlying file handle. *) 14 + val v : sw:Eio.Switch.t -> Eio.Fs.dir_ty Eio.Path.t -> t 15 + (** [v ~sw path] creates a new database at [path]. If a file already exists at 16 + [path], it will be truncated. The switch [sw] controls the lifetime of the 17 + underlying file handle. *) 18 18 19 19 val in_memory : unit -> t 20 20 (** [in_memory ()] creates a purely in-memory database. No file I/O is
+1 -1
test/test.ml
··· 1 - let () = Alcotest.run "sqlite" Test_sqlite.suite 1 + let () = Alcotest.run "sqlite" [ Test_sqlite.suite ]
+63 -67
test/test_sqlite.ml
··· 479 479 sizes 480 480 481 481 let suite = 482 - [ 483 - ( "basic", 482 + ( "sqlite", 483 + List.concat 484 484 [ 485 - Alcotest.test_case "put/get" `Quick test_put_get; 486 - Alcotest.test_case "get missing" `Quick test_get_missing; 487 - Alcotest.test_case "put overwrite" `Quick test_put_overwrite; 488 - Alcotest.test_case "delete" `Quick test_delete; 489 - Alcotest.test_case "delete missing" `Quick test_delete_missing; 490 - Alcotest.test_case "mem" `Quick test_mem; 491 - Alcotest.test_case "iter" `Quick test_iter; 492 - Alcotest.test_case "fold" `Quick test_fold; 493 - ] ); 494 - ( "binary", 495 - [ 496 - Alcotest.test_case "binary values" `Quick test_binary_values; 497 - Alcotest.test_case "empty value" `Quick test_empty_value; 498 - Alcotest.test_case "large value" `Quick test_large_value; 499 - ] ); 500 - ( "tables", 501 - [ 502 - Alcotest.test_case "basic" `Quick test_table_basic; 503 - Alcotest.test_case "isolation" `Quick test_table_isolation; 504 - Alcotest.test_case "mem/delete" `Quick test_table_mem_delete; 505 - Alcotest.test_case "iter" `Quick test_table_iter; 506 - ] ); 507 - ( "security", 508 - [ 509 - Alcotest.test_case "sql injection key" `Quick test_sql_injection_key; 510 - Alcotest.test_case "sql injection value" `Quick test_sql_injection_value; 511 - Alcotest.test_case "table name validation" `Quick 512 - test_table_name_validation; 513 - Alcotest.test_case "valid table names" `Quick test_valid_table_names; 514 - ] ); 515 - ( "unicode", 516 - [ 517 - Alcotest.test_case "unicode keys" `Quick test_unicode_keys; 518 - Alcotest.test_case "unicode values" `Quick test_unicode_values; 519 - ] ); 520 - ( "persistence", 521 - [ 522 - Alcotest.test_case "sync" `Quick test_sync; 523 - Alcotest.test_case "basic" `Quick test_persistence_basic; 524 - Alcotest.test_case "with delete" `Quick test_persistence_with_delete; 525 - Alcotest.test_case "tables" `Quick test_persistence_tables; 526 - ] ); 527 - ( "edge_cases", 528 - [ 529 - Alcotest.test_case "empty key" `Quick test_empty_key; 530 - Alcotest.test_case "key with nulls" `Quick test_key_with_nulls; 531 - Alcotest.test_case "long key" `Quick test_long_key; 532 - Alcotest.test_case "all byte values" `Quick test_all_byte_values; 533 - Alcotest.test_case "max int key length" `Quick test_max_int_key_length; 534 - ] ); 535 - ( "stress", 536 - [ 537 - Alcotest.test_case "many keys" `Slow test_many_keys; 538 - Alcotest.test_case "many updates" `Quick test_many_updates; 539 - Alcotest.test_case "interleaved ops" `Quick test_interleaved_operations; 540 - Alcotest.test_case "many tables" `Quick test_many_tables; 541 - ] ); 542 - ( "cve_regression", 543 - [ 544 - Alcotest.test_case "overflow key length" `Quick 545 - test_cve_like_overflow_key_length; 546 - Alcotest.test_case "boundary conditions" `Quick 547 - test_cve_like_boundary_conditions; 548 - ] ); 549 - ] 485 + [ 486 + Alcotest.test_case "put/get" `Quick test_put_get; 487 + Alcotest.test_case "get missing" `Quick test_get_missing; 488 + Alcotest.test_case "put overwrite" `Quick test_put_overwrite; 489 + Alcotest.test_case "delete" `Quick test_delete; 490 + Alcotest.test_case "delete missing" `Quick test_delete_missing; 491 + Alcotest.test_case "mem" `Quick test_mem; 492 + Alcotest.test_case "iter" `Quick test_iter; 493 + Alcotest.test_case "fold" `Quick test_fold; 494 + ]; 495 + [ 496 + Alcotest.test_case "binary values" `Quick test_binary_values; 497 + Alcotest.test_case "empty value" `Quick test_empty_value; 498 + Alcotest.test_case "large value" `Quick test_large_value; 499 + ]; 500 + [ 501 + Alcotest.test_case "table basic" `Quick test_table_basic; 502 + Alcotest.test_case "table isolation" `Quick test_table_isolation; 503 + Alcotest.test_case "table mem/delete" `Quick test_table_mem_delete; 504 + Alcotest.test_case "table iter" `Quick test_table_iter; 505 + ]; 506 + [ 507 + Alcotest.test_case "sql injection key" `Quick test_sql_injection_key; 508 + Alcotest.test_case "sql injection value" `Quick 509 + test_sql_injection_value; 510 + Alcotest.test_case "table name validation" `Quick 511 + test_table_name_validation; 512 + Alcotest.test_case "valid table names" `Quick test_valid_table_names; 513 + ]; 514 + [ 515 + Alcotest.test_case "unicode keys" `Quick test_unicode_keys; 516 + Alcotest.test_case "unicode values" `Quick test_unicode_values; 517 + ]; 518 + [ 519 + Alcotest.test_case "sync" `Quick test_sync; 520 + Alcotest.test_case "persistence basic" `Quick test_persistence_basic; 521 + Alcotest.test_case "persistence with delete" `Quick 522 + test_persistence_with_delete; 523 + Alcotest.test_case "persistence tables" `Quick test_persistence_tables; 524 + ]; 525 + [ 526 + Alcotest.test_case "empty key" `Quick test_empty_key; 527 + Alcotest.test_case "key with nulls" `Quick test_key_with_nulls; 528 + Alcotest.test_case "long key" `Quick test_long_key; 529 + Alcotest.test_case "all byte values" `Quick test_all_byte_values; 530 + Alcotest.test_case "max int key length" `Quick test_max_int_key_length; 531 + ]; 532 + [ 533 + Alcotest.test_case "many keys" `Slow test_many_keys; 534 + Alcotest.test_case "many updates" `Quick test_many_updates; 535 + Alcotest.test_case "interleaved ops" `Quick 536 + test_interleaved_operations; 537 + Alcotest.test_case "many tables" `Quick test_many_tables; 538 + ]; 539 + [ 540 + Alcotest.test_case "overflow key length" `Quick 541 + test_cve_like_overflow_key_length; 542 + Alcotest.test_case "boundary conditions" `Quick 543 + test_cve_like_boundary_conditions; 544 + ]; 545 + ] )
+1 -1
test/test_sqlite.mli
··· 1 1 (** Unit tests for SQLite key-value store. *) 2 2 3 - val suite : (string * unit Alcotest.test_case list) list 3 + val suite : string * unit Alcotest.test_case list