a database layer insipred by caqti and ecto
at main 2.8 kB view raw
1open Repodb 2open Common 3 4let test_values1_single_column () = 5 let q = 6 Query.insert_into users_table 7 |> Query_values.values1 name_field (Expr.string "Alice") 8 in 9 let sql = Query.to_sql q in 10 Alcotest.(check bool) "has INSERT" true (String.sub sql 0 6 = "INSERT"); 11 Alcotest.(check bool) 12 "has column name" true 13 (String.length sql > 0 14 && String.sub sql 0 30 = "INSERT INTO users (name) VALUE") 15 16let test_values3_heterogeneous () = 17 let q = 18 Query.insert_into users_table 19 |> Query_values.values3 20 (id_field, name_field, age_field) 21 (Expr.int 1, Expr.string "Bob", Expr.int 25) 22 in 23 let sql = Query.to_sql q in 24 Alcotest.(check bool) "has INSERT" true (String.sub sql 0 6 = "INSERT"); 25 Alcotest.(check bool) "has id column" true (String.length sql > 0) 26 27let test_values4_full_example () = 28 let q = 29 Query.insert_into users_table 30 |> Query_values.values4 31 (id_field, name_field, email_field, age_field) 32 ( Expr.int 1, 33 Expr.string "Alice", 34 Expr.string "alice@example.com", 35 Expr.int 30 ) 36 in 37 let sql = Query.to_sql q in 38 Alcotest.(check bool) "has INSERT" true (String.sub sql 0 6 = "INSERT"); 39 let expected_columns = "INSERT INTO users (id, name, email, age)" in 40 Alcotest.(check bool) 41 "has all columns" true 42 (String.length sql >= String.length expected_columns 43 && String.sub sql 0 (String.length expected_columns) = expected_columns) 44 45let test_values2_multi_rows () = 46 let q = 47 Query.insert_into users_table 48 |> Query_values.values2_multi (name_field, age_field) 49 [ 50 (Expr.string "Alice", Expr.int 30); 51 (Expr.string "Bob", Expr.int 25); 52 (Expr.string "Charlie", Expr.int 35); 53 ] 54 in 55 let sql = Query.to_sql q in 56 Alcotest.(check bool) "has INSERT" true (String.sub sql 0 6 = "INSERT"); 57 Alcotest.(check bool) "has multiple VALUES" true (String.length sql > 0) 58 59let test_values5_with_bool () = 60 let q = 61 Query.insert_into users_table 62 |> Query_values.values5 63 (id_field, name_field, email_field, age_field, active_field) 64 ( Expr.int 1, 65 Expr.string "Alice", 66 Expr.string "alice@example.com", 67 Expr.int 30, 68 Expr.bool true ) 69 in 70 let sql = Query.to_sql q in 71 Alcotest.(check bool) "has INSERT" true (String.sub sql 0 6 = "INSERT"); 72 Alcotest.(check bool) "has TRUE" true (String.length sql > 0) 73 74let tests = 75 [ 76 ("values1 single column", `Quick, test_values1_single_column); 77 ("values3 heterogeneous types", `Quick, test_values3_heterogeneous); 78 ("values4 full example", `Quick, test_values4_full_example); 79 ("values2_multi rows", `Quick, test_values2_multi_rows); 80 ("values5 with bool", `Quick, test_values5_with_bool); 81 ]