123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114(* Copyright (C) 2017--2024 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.
*)[@@@alert"-caqti_private"]openCaqti_templatetypedialect_tag=[`Mysql|`Pgsql|`Sqlite|`Other]typesql_dialect_tag=[`Mysql|`Pgsql|`Sqlite]typeparameter_style=[`None|`Linearofstring|`Indexedof(int->string)]typet={uri_scheme:string;dialect_tag:dialect_tag;parameter_style:parameter_style;can_transact:bool;can_pool:bool;can_concur:bool;dummy_dialect:Dialect.t;}letcreate~uri_scheme?(dialect_tag=`Other)?(parameter_style=`None)~can_pool~can_concur~can_transact~dummy_dialect()={uri_scheme;dialect_tag;parameter_style;can_transact;can_pool;can_concur;dummy_dialect;}letdummy=create~uri_scheme:"dummy"~can_pool:false~can_concur:false~can_transact:false~dummy_dialect:(Dialect.create_unknown~purpose:`Dummy())()leturi_schemedi=di.uri_schemeletdialect_tagdi=di.dialect_tagletparameter_styledi=di.parameter_styleletcan_pooldi=di.can_poolletcan_concurdi=di.can_concurletcan_transactdi=di.can_transactletdummy_dialectdi=di.dummy_dialectletof_dialect=function|Dialect.Pgsql{client_library=`postgresql;_}asdialect->create~uri_scheme:"postgresql"~dialect_tag:`Pgsql~parameter_style:(`Indexed(funi->"$"^string_of_int(succi)))~can_pool:true~can_concur:true~can_transact:true~dummy_dialect:dialect()|Dialect.Pgsql{client_library=`pgx;_}asdialect->create~uri_scheme:"pgx"~dialect_tag:`Pgsql~parameter_style:(`Indexed(funi->"$"^string_of_int(succi)))~can_pool:true~can_concur:true~can_transact:true~dummy_dialect:dialect()|Dialect.Mysql_asdialect->create~uri_scheme:"mariadb"~dialect_tag:`Mysql~parameter_style:(`Linear"?")~can_pool:true~can_concur:true~can_transact:true~dummy_dialect:dialect()|Dialect.Sqlite_asdialect->create~uri_scheme:"sqlite3"~dialect_tag:`Sqlite~parameter_style:(`Linear"?")~can_pool:true~can_concur:false~can_transact:true~dummy_dialect:dialect()|_->dummy