(** Parse a text value into a date *) let first_day = CalendarLib.Date.make 1899 12 30 let f : Sqlite3.Data.t -> Sqlite3.Data.t -> Sqlite3.Data.t = fun str data -> match (str, data) with | Sqlite3.Data.TEXT format_, Sqlite3.Data.TEXT content -> ( try let date = CalendarLib.Printer.Date.from_fstring format_ content in let period = CalendarLib.Date.sub date first_day |> CalendarLib.Date.Period.nb_days |> Int64.of_int in Sqlite3.Data.INT period with | Invalid_argument e -> prerr_endline e; Sqlite3.Data.NULL) | _ -> (* If the data is already a date, it should be preserved as is *) data let register : Sqlite3.db -> unit = fun db -> Sqlite3.create_fun2 db "date" f