package caqti
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=bc67a61e9c43f1cd9ab54476bdd4ea6495decd281aececcb4062c29713a7391d
sha512=17018a142bd29be3b503c6b6f5320ec65b3418a46bb82c0127f5ff198890d56bd9e50263ce20930e8c6e0dadb8bdf5f43b6479fc111948d44e3170715e40c290
doc/caqti.blocking/Caqti_blocking/module-type-CONNECTION/index.html
Module type Caqti_blocking.CONNECTION
Source
The connection API specialized for the current concurrency library.
val driver_info : Caqti_driver_info.t
Information about the driver providing this connection module.
include Caqti_connection_sig.Base
with type 'a future := 'a future
with type ('a, 'err) stream := ('a, 'err) Stream.t
Query
val call :
f:(('b, 'm) Response.t -> ('c, 'e) result future) ->
('a, 'b, 'm) Caqti_request.t ->
'a ->
('c, [> Caqti_error.call ] as 'e) result future
call ~f request params
performs request
with parameters params
invoking f
to process the result. The argument of f
is only valid during the call to f
, and must not be returned or operated on by other threads.
Transactions
val start : unit -> (unit, [> Caqti_error.transact ]) result future
Starts a transaction if supported by the underlying database, otherwise does nothing.
val commit : unit -> (unit, [> Caqti_error.transact ]) result future
Commits the current transaction if supported by the underlying database, otherwise does nothing.
val rollback : unit -> (unit, [> Caqti_error.transact ]) result future
Rolls back a transaction if supported by the underlying database, otherwise does nothing.
Disconnection and Reuse
val deallocate :
('a, 'b, 'm) Caqti_request.t ->
(unit, [> Caqti_error.call ]) result future
deallocate req
deallocates the prepared query for req
if it was allocated. The request must not be oneshot.
val disconnect : unit -> unit future
Calling disconnect ()
closes the connection to the database and frees up related resources.
val validate : unit -> bool future
For internal use by Caqti_pool
. Tries to ensure the validity of the connection and must return false
if unsuccessful.
For internal use by Caqti_pool
. Called after a connection has been used. check f
must call f ()
exactly once with an argument indicating whether to keep the connection in the pool or discard it.
include Caqti_connection_sig.Convenience with type 'a future := 'a future
Retrieval Convenience
These are shortcuts for call
combined with retrieval functions from Caqti_response_sig.S
of the same name.
val exec :
('a, unit, [< `Zero ]) Caqti_request.t ->
'a ->
(unit, [> Caqti_error.call_or_retrieve ] as 'e) result future
Combining call
with Response.exec
, this sends a request to the database and checks that no rows are returned.
val find :
('a, 'b, [< `One ]) Caqti_request.t ->
'a ->
('b, [> Caqti_error.call_or_retrieve ] as 'e) result future
Combining call
with Response.find
, this sends a request to the database, checks that a single row is returned, and extracts it.
val find_opt :
('a, 'b, [< `Zero | `One ]) Caqti_request.t ->
'a ->
('b option, [> Caqti_error.call_or_retrieve ] as 'e) result future
Combining call
with Response.find_opt
, this sends a request to the database, checks that at most one row is returned, and extracts it if present.
val fold :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
('b -> 'c -> 'c) ->
'a ->
'c ->
('c, [> Caqti_error.call_or_retrieve ] as 'e) result future
Combining call
with Response.fold
, this sends a request to the database and folds over the result rows.
val fold_s :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
('b -> 'c -> ('c, 'e) result future) ->
'a ->
'c ->
('c, [> Caqti_error.call_or_retrieve ] as 'e) result future
Combining call
with Response.fold_s
, this sends a request to the database and folds sequentially over the result rows in a non-blocking manner.
Please be aware of possible deadlocks when using resources from the callback. In particular, if the same connection pool is invoked as the one used to obtain the current connection, it will deadlock if the pool has just run out of connections. An alternative is to collect the rows first e.g. with fold
and do the nested queries after exiting.
val iter_s :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
('b -> (unit, 'e) result future) ->
'a ->
(unit, [> Caqti_error.call_or_retrieve ] as 'e) result future
Combining call
with Response.iter_s
, this sends a request to the database and iterates sequentially over the result rows in a non-blocking manner. Please see the warning in fold_s
about resource usage in the callback.
val collect_list :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
'a ->
('b list, [> Caqti_error.call_or_retrieve ] as 'e) result future
collect_list request param
performs a call
on request
, extracting the result as a list.
val rev_collect_list :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
'a ->
('b list, [> Caqti_error.call_or_retrieve ] as 'e) result future
rev_collect_list request param
performs a call
on request
, extracting the result as a reversed list. This is more efficient than find_list
and fits well with a subsequent List.rev_map
, though it may not matter much in practise.
include Caqti_connection_sig.Populate
with type 'a future := 'a future
and type ('a, 'err) stream := ('a, 'err) Stream.t
Insertion
val populate :
table:string ->
columns:string list ->
'a Caqti_type.t ->
('a, 'err) Stream.t ->
(unit, [> Caqti_error.call_or_retrieve | `Congested of 'err ]) result future
populate table columns row_type seq
inputs the contents of seq
into the database in whatever manner is most efficient as decided by the driver.