Skip to content

Commit 1e64e8b

Browse files
committed
add binary_result to send_query and send_query_prepared
1 parent a34c648 commit 1e64e8b

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

lib/postgresql.ml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ module Stub = struct
482482
oid array ->
483483
string array ->
484484
bool array ->
485+
bool ->
485486
(int[@untagged]) = "PQsendQueryParams_stub_bc" "PQsendQueryParams_stub"
486487

487488
external send_prepare :
@@ -490,7 +491,8 @@ module Stub = struct
490491
[@@noalloc]
491492

492493
external send_query_prepared :
493-
connection -> string -> string array -> bool array -> (int[@untagged])
494+
connection -> string -> string array -> bool array -> bool ->
495+
(int[@untagged])
494496
= "PQsendQueryPrepared_stub_bc" "PQsendQueryPrepared_stub"
495497

496498
external send_describe_prepared : connection -> string -> (int[@untagged])
@@ -1006,11 +1008,11 @@ class connection ?host ?hostaddr ?port ?dbname ?user ?password ?options ?tty
10061008
if Stub.result_isnull r then signal_error conn else r))
10071009

10081010
method send_query ?(param_types = [||]) ?(params = [||])
1009-
?(binary_params = [||]) query =
1011+
?(binary_params = [||]) ?(binary_result=false) query =
10101012
wrap_conn (fun conn ->
10111013
if
10121014
Stub.send_query_params conn query param_types params
1013-
binary_params
1015+
binary_params binary_result
10141016
<> 1
10151017
then signal_error conn)
10161018

@@ -1020,9 +1022,11 @@ class connection ?host ?hostaddr ?port ?dbname ?user ?password ?options ?tty
10201022
signal_error conn)
10211023

10221024
method send_query_prepared ?(params = [||]) ?(binary_params = [||])
1025+
?(binary_result=false)
10231026
stm_name =
10241027
wrap_conn (fun conn ->
1025-
if Stub.send_query_prepared conn stm_name params binary_params <> 1
1028+
if Stub.send_query_prepared conn stm_name params
1029+
binary_params binary_result <> 1
10261030
then signal_error conn)
10271031

10281032
method send_describe_prepared stm_name =

lib/postgresql.mli

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,7 @@ object
722722
?param_types:oid array ->
723723
?params:string array ->
724724
?binary_params:bool array ->
725+
?binary_result:bool ->
725726
string ->
726727
unit
727728
(** [send_query ?param_types ?params ?binary_params query] asynchronous
@@ -751,7 +752,11 @@ object
751752
@raise Error if there is a connection error. *)
752753

753754
method send_query_prepared :
754-
?params:string array -> ?binary_params:bool array -> string -> unit
755+
?params:string array ->
756+
?binary_params:bool array ->
757+
?binary_result:bool ->
758+
string ->
759+
unit
755760
(** [#send_query_prepared ?params ?binary_params stm_name] is an asynchronous
756761
version of {!connection.exec_prepared}. The semantics is otherwise the
757762
same, and the result is reported by {!connection.get_result} when

lib/postgresql_stubs.c

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,8 @@ NOALLOC_CONN_INFO(PQisnonblocking, Val_bool)
949949

950950
CAMLprim intnat PQsendQueryParams_stub(value v_conn, value v_query,
951951
value v_param_types, value v_params,
952-
value v_binary_params) {
952+
value v_binary_params,
953+
value v_binary_result) {
953954
PGconn *conn = get_conn(v_conn);
954955
const char *query = String_val(v_query);
955956
size_t nparams = Wosize_val(v_params);
@@ -959,9 +960,11 @@ CAMLprim intnat PQsendQueryParams_stub(value v_conn, value v_query,
959960
int *lengths, *formats;
960961
intnat res;
961962
copy_binary_params(v_params, v_binary_params, nparams, &formats, &lengths);
963+
bool binary_result = Bool_val(v_binary_result);
962964
res = (nparams == 0) ? PQsendQuery(conn, query)
963965
: PQsendQueryParams(conn, query, nparams, param_types,
964-
params, lengths, formats, 0);
966+
params, lengths, formats,
967+
binary_result);
965968
if (param_types != NULL)
966969
caml_stat_free(param_types);
967970
free_binary_params(formats, lengths);
@@ -971,9 +974,10 @@ CAMLprim intnat PQsendQueryParams_stub(value v_conn, value v_query,
971974

972975
CAMLprim value PQsendQueryParams_stub_bc(value v_conn, value v_query,
973976
value v_param_types, value v_params,
974-
value v_binary_params) {
977+
value v_binary_params,
978+
value v_binary_result) {
975979
return Val_int(PQsendQueryParams_stub(v_conn, v_query, v_param_types,
976-
v_params, v_binary_params));
980+
v_params, v_binary_params, v_binary_result));
977981
}
978982

979983
CAMLprim intnat PQsendPrepare_stub(value v_conn, value v_stm_name,
@@ -997,26 +1001,31 @@ CAMLprim value PQsendPrepare_stub_bc(value v_conn, value v_stm_name,
9971001

9981002
CAMLprim intnat PQsendQueryPrepared_stub(value v_conn, value v_stm_name,
9991003
value v_params,
1000-
value v_binary_params) {
1004+
value v_binary_params,
1005+
value v_binary_result) {
10011006
PGconn *conn = get_conn(v_conn);
10021007
const char *stm_name = String_val(v_stm_name);
10031008
size_t nparams = Wosize_val(v_params);
10041009
const char *const *params = copy_params_shallow(v_params, nparams);
10051010
int *lengths, *formats;
10061011
intnat res;
10071012
copy_binary_params(v_params, v_binary_params, nparams, &formats, &lengths);
1013+
bool binary_result = Bool_val(v_binary_result);
10081014
res =
1009-
PQsendQueryPrepared(conn, stm_name, nparams, params, lengths, formats, 0);
1015+
PQsendQueryPrepared(conn, stm_name, nparams, params, lengths,
1016+
formats, binary_result);
10101017
free_binary_params(formats, lengths);
10111018
free_params_shallow(params, nparams);
10121019
return res;
10131020
}
10141021

10151022
CAMLprim value PQsendQueryPrepared_stub_bc(value v_conn, value v_stm_name,
10161023
value v_params,
1017-
value v_binary_params) {
1024+
value v_binary_params,
1025+
value v_binary_result) {
10181026
return Val_int(
1019-
PQsendQueryPrepared_stub(v_conn, v_stm_name, v_params, v_binary_params));
1027+
PQsendQueryPrepared_stub(v_conn, v_stm_name, v_params,
1028+
v_binary_params, v_binary_result));
10201029
}
10211030

10221031
#ifdef PG_OCAML_8_2

0 commit comments

Comments
 (0)