blob: 3f82b929eda481f00b760f2d61df50adf27fbed3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
module D = Sqlite3.Data
let f : Sqlite3.Data.t array -> Sqlite3.Data.t =
fun arguments ->
if Array.length arguments < 2 then Sqlite3.Data.NULL
else
let sep = Array.get arguments 0 in
(* Shift all the elements into an list*)
let contents =
Array.to_seqi arguments
|> Seq.filter_map (fun (i, value) ->
if i = 0 then None
else
match value with
| D.INT i -> Some (Int64.to_string i)
| D.FLOAT f -> Some (Float.to_string f)
| D.NONE -> None
| D.NULL -> None
| D.TEXT s | D.BLOB s ->
if String.length s = 0 then None else Some (String.trim s))
|> List.of_seq
in
D.TEXT (String.concat (D.to_string_coerce sep) contents)
let register : Sqlite3.db -> unit =
fun db ->
Sqlite3.create_funN db "join" f;
Sqlite3.create_funN db "concat" f
|