let f : Sqlite3.Data.t -> Sqlite3.Data.t -> Sqlite3.Data.t = let memo = Hashtbl.create 16 in fun str data_1 -> match (str, data_1) with | Sqlite3.Data.TEXT s, Sqlite3.Data.TEXT content -> ( let regex = match Hashtbl.find_opt memo s with | None -> let regex = Re.Posix.compile_pat s in Hashtbl.add memo s regex; regex | Some v -> v in match Re.exec_opt regex content with | None -> Sqlite3.Data.NULL | Some g -> let matched = Re.Group.get g 1 in Sqlite3.Data.TEXT matched) | _, _ -> data_1 let register : Sqlite3.db -> unit = fun db -> Sqlite3.create_fun2 db "match" f