blob: 82fc1dadc8a4396d3061b0ed3eee9b77a775933c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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
|