Source file mp_ok_prepare_packet.ml
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
type ok_prepare_packet = {
ok_prepare_handler : Int64.t;
ok_prepare_nb_columns : int;
ok_prepare_nb_parameters : int;
ok_prepare_warning_count : int;
ok_prepare_parameters_fields : Mp_field_packet.field_packet list;
ok_prepare_parameters_names : Mp_field.field_name list;
ok_prepare_columns_fields : Mp_field_packet.field_packet list;
ok_prepare_columns_names : Mp_field.field_name list;
}
let ok_prepare_packet_to_string p =
let f_packet acc p =
acc ^ "\n" ^ (Mp_field_packet.field_packet_to_string p)
in
let f_name acc e =
acc ^ "\n" ^ (Mp_field.field_name_to_string e)
in
let fmt = format_of_string "ok_prepare_handler : %Lu\n"
^^ format_of_string "ok_prepare_nb_columns : %u\n"
^^ format_of_string "ok_prepare_nb_parameters : %u\n"
^^ format_of_string "ok_prepare_warning_count : %u\n"
^^ format_of_string "PARAMETERS FIELDS: \n"
^^ format_of_string "\nFields: \n%s"
^^ format_of_string "\nNames: \n%s"
^^ format_of_string "\n\nCOLUMNS FIELDS: \n"
^^ format_of_string "\nFields: \n%s"
^^ format_of_string "\nNames: \n%s"
in
Printf.sprintf fmt p.ok_prepare_handler
p.ok_prepare_nb_columns
p.ok_prepare_nb_parameters
p.ok_prepare_warning_count
(List.fold_left f_packet "" p.ok_prepare_parameters_fields)
(List.fold_left f_name "" p.ok_prepare_parameters_names)
(List.fold_left f_packet "" p.ok_prepare_columns_fields)
(List.fold_left f_name "" p.ok_prepare_columns_names)
let ok_prepare_packet bits ic oc =
match%bitstring bits with
| {| handler : Mp_bitstring.compute32 : int, unsigned, littleendian;
nb_columns : 2*8 : int, unsigned, littleendian;
nb_parameters : 2*8 : int, unsigned, littleendian;
0x0 : 8 : int;
warning_count : 2*8 : int, unsigned, littleendian |} ->
let (list_field_parameters, list_name_parameters) =
if (nb_parameters > 0) then (
let list_field_packets = ref [] in
let () =
for _ = 1 to nb_parameters do
Mp_field_packet.field_packet list_field_packets ic oc
done
in
let list_field_packets = List.rev !list_field_packets in
let list_field_names = Mp_field.real_field_names list_field_packets in
let _ = Mp_eof_packet.eof_packet_chan ic oc in
(list_field_packets, list_field_names)
)
else (
([], [])
)
in
let (list_field_columns, list_name_columns) =
if (nb_columns > 0) then (
let list_field_packets = ref [] in
let () =
for _ = 1 to nb_columns do
Mp_field_packet.field_packet list_field_packets ic oc
done
in
let list_field_packets = List.rev !list_field_packets in
let list_field_names = Mp_field.real_field_names list_field_packets in
let _ = Mp_eof_packet.eof_packet_chan ic oc in
(list_field_packets, list_field_names)
)
else (
([], [])
)
in
{
ok_prepare_handler = handler;
ok_prepare_nb_columns = nb_columns;
ok_prepare_nb_parameters = nb_parameters;
ok_prepare_warning_count = warning_count;
ok_prepare_parameters_fields = list_field_parameters;
ok_prepare_parameters_names = list_name_parameters;
ok_prepare_columns_fields = list_field_columns;
ok_prepare_columns_names = list_name_columns;
}