(** 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