a database layer insipred by caqti and ecto
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 ]