package caqti
Unified interface to relational database libraries
Install
Dune Dependency
Authors
Maintainers
Sources
caqti-v2.2.4.tbz
sha256=b8ea432820154ec095132c4f7b244b06cd8553e0b2035185b844d9c4f30af8bb
sha512=b7e3ad8e6a9b587db2d517e15cd42df2945148f9223b2fa6f4bc2bcdd2709d53549cca4b65e54511d22466e4c9aa7f0b9c17305a07505519d8bf81d95de629b8
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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
(* Copyright (C) 2019--2025 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_helpers (System : System_sig.S) = struct open System open System.Fiber.Infix let assert_single_use ~what in_use f = if !in_use then failwith ("Invalid concurrent usage of " ^ what ^ " detected."); in_use := true; Fiber.cleanup (fun () -> f () >|= fun res -> in_use := false; res) (fun () -> in_use := false; Fiber.return ()) end 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)"
>