package caqti
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Unified interface to relational database libraries
Install
dune-project
Dependency
Authors
Maintainers
Sources
caqti-v2.3.2.tbz
sha256=8f6c1724b59ac22a5c657c9e53b9a1706e39ecd462e82958b0cea88e43f0aba7
sha512=75b968ab37ae94cadcaabbcce0f91b1ffa4334ed69e441bdeb823077eb7675264282efb0fab3baaaad446582cfb427769e19f22c8c194a316ac2248c3fba5cf8
doc/src/caqti.platform/connection_utils.ml.html
Source file connection_utils.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 91 92 93 94 95(* Copyright (C) 2019--2026 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 LGPL-3.0 Linking 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 * and the LGPL-3.0 Linking Exception along with this library. If not, see * <http://www.gnu.org/licenses/> and <https://spdx.org>, respectively. *) module Make_convenience (System : System_sig.S) (C : Caqti_connection_sig.Base with type 'a fiber := 'a System.Fiber.t and type ('a, 'err) stream := ('a, 'err) System.Stream.t) = struct open System open System.Fiber.Infix module Response = C.Response let (>>=?) m f = m >>= function Ok x -> f x | Error _ as r -> Fiber.return r let (>|=?) m f = m >|= function Ok r -> Ok (f r) | Error _ as r -> r let exec q p = C.call ~f:Response.exec q p let find q p = C.call ~f:Response.find q p let find_opt q p = C.call ~f:Response.find_opt q p let fold q f p acc = C.call ~f:(fun resp -> Response.fold f resp acc) q p let fold_s q f p acc = C.call ~f:(fun resp -> Response.fold_s f resp acc) q p let iter_s q f p = C.call ~f:(fun resp -> Response.iter_s f resp) q p let collect_list q p = let f resp = Response.fold List.cons resp [] >|= Result.map List.rev in C.call ~f q p let rev_collect_list q p = let f resp = Response.fold List.cons resp [] in C.call ~f q p let exec_with_affected_count q p = let f response = Response.exec response >>= fun execResult -> match execResult with | Ok () -> Response.affected_count response | Error x -> Fiber.return (Error x) in C.call ~f q p let with_transaction f = C.start () >>=? fun () -> Fiber.cleanup (fun () -> f () >>= (function | Ok y -> C.commit () >|=? fun () -> y | Error _ as r -> C.rollback () >|= fun _ -> r)) (fun () -> C.rollback () >|= ignore) end module Make_populate (System : System_sig.S) (C : Caqti_connection_sig.Base with type 'a fiber := 'a System.Fiber.t and type ('a, 'e) stream := ('a, 'e) System.Stream.t) = struct open System open System.Fiber.Infix let (>>=?) m f = m >>= function Ok x -> f x | Error _ as r -> Fiber.return r let populate ~table ~columns row_type = let request = let open Caqti_template.Create in dynamic_gen T.(row_type -->. unit) @@ Fun.const @@ Q.concat [ Q.lit "INSERT INTO "; Q.lit table; Q.lit "("; Q.concat ~sep:", " (List.map Q.lit columns); Q.lit ") VALUES ("; Q.concat ~sep:", " (List.mapi (fun i _ -> Q.param i) columns); Q.lit ")"; ] in fun data -> C.start () >>=? fun () -> Stream.iter_s ~f:(C.call ~f:C.Response.exec request) data >>= fun res -> C.deallocate request >>= fun _ -> (match res with | Ok () -> C.commit () | Error (`Congested err) -> C.rollback () >>=? fun () -> Fiber.return (Error (`Congested err)) | Error err -> Fiber.return (Error err)) end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>