package caqti
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=483a535f41e2641917fc1832ce4ad15ffc3f4e8283b1b3018a2617349583090a
sha512=6a1222c0c55cb16a9d409980f9f2400340689b87e21aafed2d7459fd7feaeb109c2dfaf77f55f8422fbb7d3772342565ced7fed78a7b77af5aedab5bfd5ae882
doc/caqti/Caqti_connection_sig/module-type-S/index.html
Module type Caqti_connection_sig.SSource
Full connection signature available to users.
Information about the driver providing this connection module.
The underlying connection object of the driver if available. The open variant constructor is defined in the driver library. This is currently only implemented for caqti-driver-sqlite3 for the purpose of defining custom functions.
include Base
Query
val call :
f:(('b, 'm) Response.t -> ('c, 'e) result fiber) ->
('a, 'b, 'm) Caqti_request.t ->
'a ->
('c, [> Caqti_error.call ] as 'e) result fibercall ~f request params executes request with parameters params invoking f to process the result; except the driver may postpone the request until f attempts to retrieve the result.
One of the result retrieval functions must be called exactly once before f returns a non-error result. If a result retrieval function is not called, it is unspecified whether the database query has been issued.
The argument of f is only valid during the call to f, and must not be returned or operated on by other threads.
Set or clear the timeout after which a running SQL statement will be terminated if supported by the driver. This is currently supported for MariaDB (using max_statement_time) and PostgreSQL (using statement_timeout) and has no effect for SQLite3.
Transactions
Starts a transaction if supported by the underlying database, otherwise does nothing.
Commits the current transaction if supported by the underlying database, otherwise does nothing.
Rolls back a transaction if supported by the underlying database, otherwise does nothing.
Disconnection and Reuse
deallocate req deallocates the prepared query for req if it was allocated. The request must not be oneshot.
Calling disconnect () closes the connection to the database and frees up related resources.
For internal use by pool implementations. Tries to ensure the validity of the connection and must return false if unsuccessful.
For internal use by pool implementations. 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 Convenience with type 'a fiber := 'a fiber
Retrieval Convenience
Each of these shortcuts combine call with the correspondingly named retrieval function from Caqti_response_sig.S.
val exec :
('a, unit, [< `Zero ]) Caqti_request.t ->
'a ->
(unit, [> Caqti_error.call_or_retrieve ] as 'e) result fiberexec req x performs req with parameters x and checks that no rows are returned. See also Caqti_response_sig.S.exec.
val exec_with_affected_count :
('a, unit, [< `Zero ]) Caqti_request.t ->
'a ->
(int, [> Caqti_error.call_or_retrieve | `Unsupported ] as 'e) result fiberexec_with_affected_count req x performs req with parameters x, checks that no rows are returned, and returns the number of affected rows.
See also Caqti_response_sig.S.exec and Caqti_response_sig.S.affected_count.
val find :
('a, 'b, [< `One ]) Caqti_request.t ->
'a ->
('b, [> Caqti_error.call_or_retrieve ] as 'e) result fiberfind req x performs req with parameters x, checks that a single row is retured, and returns it.
See also Caqti_response_sig.S.find.
val find_opt :
('a, 'b, [< `Zero | `One ]) Caqti_request.t ->
'a ->
('b option, [> Caqti_error.call_or_retrieve ] as 'e) result fiberfind_opt req x performs req with parameters x and returns either None if no rows are returned or Some y if a single now y is returned and fails otherwise.
See also Caqti_response_sig.S.find_opt.
val fold :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
('b -> 'c -> 'c) ->
'a ->
'c ->
('c, [> Caqti_error.call_or_retrieve ] as 'e) result fiberfold req f x acc performs req with parameters x and passes acc through the composition of f y across the result rows y in the order of retrieval.
See also Caqti_response_sig.S.fold.
val fold_s :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
('b -> 'c -> ('c, 'e) result fiber) ->
'a ->
'c ->
('c, [> Caqti_error.call_or_retrieve ] as 'e) result fiberfold_s req f x acc performs req with parameters x and passes acc through the monadic composition of f y across the returned rows y in the order of retrieval.
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.
See also Caqti_response_sig.S.fold_s.
val iter_s :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
('b -> (unit, 'e) result fiber) ->
'a ->
(unit, [> Caqti_error.call_or_retrieve ] as 'e) result fiberiter_s req f x performs req with parameters x and sequences calls to f y for each result row y in the order of retrieval.
Please see the warning in fold_s about resource usage in the callback.
See also Caqti_response_sig.S.iter_s.
val collect_list :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
'a ->
('b list, [> Caqti_error.call_or_retrieve ] as 'e) result fibercollect_list request x performs a req with parameters x and returns a list of rows in order of retrieval. The accumulation is tail recursive but slightly less efficient than rev_collect_list.
val rev_collect_list :
('a, 'b, [< `Zero | `One | `Many ]) Caqti_request.t ->
'a ->
('b list, [> Caqti_error.call_or_retrieve ] as 'e) result fiberrev_collect_list request x performs request with parameters x and returns a list of rows in the reverse order of retrieval. The accumulation is tail recursive and slighly more efficient than collect_list.
Transactions
include Populate
with type 'a fiber := 'a fiber
and type ('a, 'err) stream := ('a, 'err) stream
Insertion
val populate :
table:string ->
columns:string list ->
'a Caqti_type.t ->
('a, 'err) stream ->
(unit, [> Caqti_error.call_or_retrieve | `Congested of 'err ]) result fiberpopulate table columns row_type seq inputs the contents of seq into the database in whatever manner is most efficient as decided by the driver.