File: test_error.ml

package info (click to toggle)
ocaml-sqlite3 5.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 344 kB
  • sloc: ansic: 1,396; ml: 1,248; makefile: 34
file content (53 lines) | stat: -rw-r--r-- 1,619 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
open Sqlite3

exception This_function_always_fails

(* Tests our ability to raise an exception from a user-defined function *)
let%test "test_error" =
  let db = db_open "t_error" in
  create_fun0 db "MYERROR" (fun () -> raise This_function_always_fails);
  let first_test =
    try
      let res = exec db "SELECT MYERROR();" in
      prerr_endline ("Should have thrown an error: " ^ Rc.to_string res);
      false
    with This_function_always_fails ->
      print_endline "Ok";
      true
  in

  (* This pattern shows typical usage *)
  exec db "PRAGMA synchronous = OFF;" |> Rc.check;
  exec db "PRAGMA journal_mode = MEMORY;" |> Rc.check;
  let second_test =
    try
      exec db "THIS SHOULD THROW AN EXCEPTION;; BECAUSE IT IS NOT VALID;;"
      |> Rc.check;
      false
    with SqliteError _ ->
      print_endline "Ok";
      true
  in

  (* Check the extended error code. *)
  exec db "CREATE TABLE erc1 (x INTEGER UNIQUE NOT NULL CHECK (x > 0))"
  |> Rc.check;
  exec db "CREATE TABLE erc2 (x INTEGER PRIMARY KEY, y REFERENCES erc1(x))"
  |> Rc.check;
  let erc_test expected_erc q =
    let _ = exec db q in
    let erc = extended_errcode_int db in
    if erc = expected_erc then (
      print_endline "Ok";
      true)
    else (
      Printf.eprintf "Expected extended error code %d for %S, got %d.\n%!"
        expected_erc q erc;
      false)
  in

  first_test && second_test
  && erc_test 1299 "INSERT INTO erc1 (x) VALUES (NULL)"
  && erc_test 275 "INSERT INTO erc1 (x) VALUES (0)"
  && erc_test 2067 "INSERT INTO erc1 (x) VALUES (1), (1)"
  && erc_test 1555 "INSERT INTO erc2 (x) VALUES (1), (1)"