12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182(* Copyright (C) 2017--2018 Petter A. Urkedal <paurkedal@gmail.com>
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your
* option) any later version, with the OCaml static compilation exception.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*)(** Signature of a response from a database. *)moduletypeS=sigtype'bfuturetype('b,+'m)t(** The type describing the response and containing returned data from a
request execution.
- ['b] is the type of a single row
- ['m] is the possible multiplicities of rows *)(** {2 Result inspection} *)valreturned_count:('b,'m)t->(int,[>Caqti_error.retrieve|`Unsupported])resultfuture(** [returned_count resp] is the number of rows returned by [resp]. This
function may not be available for all databases. *)valaffected_count:('b,'m)t->(int,[>Caqti_error.retrieve|`Unsupported])resultfuture(** [affected_count resp] is the number of rows affected by the updated the
produced [resp]. This function may not be available for all databases. *)(** {2 Result retrieval} *)valexec:(unit,[<`Zero])t->(unit,[>Caqti_error.retrieve])resultfuture(** [exec resp] checks that [resp] succeeded with no result rows. *)valfind:('b,[<`One])t->('b,[>Caqti_error.retrieve])resultfuture(** [find resp] checks that [resp] succeeded with a single row, and returns
the decoded row. *)valfind_opt:('b,[<`Zero|`One])t->('boption,[>Caqti_error.retrieve])resultfuture(** [find_opt resp] checks that [resp] succeeded with at most one row, and
returns the row if any. *)valfold:('b->'c->'c)->('b,'m)t->'c->('c,[>Caqti_error.retrieve])resultfuture(** [fold f resp] folds [f] over the decoded rows returned in [resp]. *)valfold_s:('b->'c->('c,'e)resultfuture)->('b,'m)t->'c->('c,[>Caqti_error.retrieve]as'e)resultfuture(** [fold_s f resp] folds [f] over the decoded rows returned by [resp] within
the IO and result monad.
{b Note.} Do not make nested queries in the callback to this function. If
you use the same connection, it may lead to data corruption. If you pull
a different connection from the same pool, it may deadlock if the pool
runs out of connections. Also, some drivers may not support simpltaneous
connections. *)valiter_s:('b->(unit,'e)resultfuture)->('b,'m)t->(unit,[>Caqti_error.retrieve]as'e)resultfuture(** [iter_s f resp] iterates [f] over the decoded rows returned by [resp]
within the IO and result monad.
{b Note.} Do not make nested queries in the callback to this function.
Cf. {!fold_s}. *)end