aboutsummaryrefslogtreecommitdiff
path: root/lib/sql/math.ml
blob: 576d9f6d9828c4ee58a56e09dde9e0542e5aca51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(** Math functions *)

let int : Sqlite3.Data.t -> Sqlite3.Data.t =
 fun data ->
  match data with
  (* If the data is already an int, do not change it *)
  | Sqlite3.Data.INT _ -> data
  | Sqlite3.Data.FLOAT content -> Sqlite3.Data.INT (Int64.of_float content)
  | Sqlite3.Data.BLOB content | Sqlite3.Data.TEXT content -> begin
      match Int64.of_string_opt content with
      | Some i -> Sqlite3.Data.INT i
      | None -> begin
          match Float.of_string_opt content with
          | Some f -> Sqlite3.Data.INT (Int64.of_float f)
          | None -> Sqlite3.Data.NULL
        end
    end
  | _ -> Sqlite3.Data.NULL

let register : Sqlite3.db -> unit = fun db -> Sqlite3.create_fun1 db "int" int