Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
v1.9.0 - 2022-09-06
New features:
Allow unquoted semicolons in query strings in the new API. There are corner cases where it is needed, as reported in issue #87, and a parser which rejects semicolons are still available for loading schema files statement by statement.
Add support for MySQL and MariaDB configuration files, as a solution to issue #86.
Add a limit to the number of times a database connection is reused when pooling connections (#94). Thanks to Peter Mondlock for investigating resource usage server side motivating this addition.
Provide access to the raw SQLite3 connection handle for the purpose of defining custom functions (#56).
Fixes:
Add missing dune dependency on unix (GPR#85 by David Allsopp).
Documentation fixes (GPR#82, GPR#83, GPR#84 by Reynir Björnsson, GPR#88 by Jonathan Duarte, and GPR#92 by Jim Tittsler).
Deprecations:
Caqti_type.field was deprecated in favour of Caqti_type.Field.t.
Other:
Replace deprecated core_kernel dependency with core.
v1.8.0 - 2022-03-24
New features:
A matchable representation of common causes of errors on the database side is now available, with limitations. It focuses on conditions which seem most likely useful to handle. At the moment we lack extended error codes from SQLite3 needed to make the cause fully precise.
Expose the underlying error details from database client libraries. This is meant to be use as a last resort, and requires directly linking with the relevant drivers.
A second set of request construction operators ->., ->?, ->!, and ->* were introduced after experience with converting existing code. Given the parameter and result type they return a function which constructs a request directly from a query string. Avoiding the need to compose with @:- simplifies local opens and usage with List.map etc.
Environment variables are now expanded in the debug log when using the new request constructors introduced in 1.7.0.
A new ?tweaks_version connection parameter has been added to control when the client is ready to adapt to changes in database session parameters or other adjustments of the interaction with specific database systems.
Enable foreign key constraint checks for SQLite3 starting at tweaks version 1.8.
Fixes:
Fixed debug logging to pass the correct driver info to the query callback instead of a dummy driver info which would cause a failure if unsupported.
Deprecations:
The --> operator was renamed to -->!, with a deprecated alias, for consistency with the new ->! operator.
The old convenience interface for creating requests has been deprecated in favour of the new infix operators and the new query template parser.
Documented-only deprecations of Caqti_sql_io, Caqti_lwt_sql_io, and Caqti_async_sql_io have been annotated.
v1.7.0 - 2022-02-13
New features:
Added a new query-string parser based on Angstrom. Its main advantage is that it can be used stand-alone e.g. to load SQL schemas from files split into individual statements which can be sent to the database.
Support passing a query environment to the connect and pool construction functions. This avoids using globals to modify the environment and facilitates e.g. targeting different database schemas with different connetions or connection pools.
A new Caqti_query.E case was added to support the two above cases. This is a breaking change, but hopefully does not break existing code. The exception (not counting module type of) would be if the constructors are aliased along with an alias of the type. On the other hand, pattern matching should be compatible since the new constructor is only emitted by newly introduced functions.
Added a module Caqti_request.Infix providing a new high-level API for constructing requests. It uses two-stage combinators, first to apply type arguments then to apply the query string. Apart from allowing nicer looking code, this solves the problem of switching to a the query string parser while maintaining backwards compatibility.
Added set_statement_timeout to connection modules, used to set query timeout. It is only supported for PostgreSQL and MariaDB. (#74)
Added with_transaction function to connection modules. This is just fail-safed wrapper around start, commit, and rollback.
Fixes:
Fixed delayed recovery of connection pools after loosing connections to PostgreSQL. Due to a missing call to consume inputs, the pool validator did not discover that a connection was lost before it was attempted reused.
Improved resilience against exceptions and monadic errors in callbacks and fixed in-use checking.
Changed Sqlite3 driver to use non-linear parameters and improve error reporting when the wrong number of arguments are received (#77 & GPR#79 Reynir Björnsson).
Other changes:
The Caqti license now uses the LGPL-3.0 Linking Exception instead of a rephrasing of the OCaml LGPL Linking Exception which was written for LGPL-2.1.
Improved documentation, pretty-printing, logging, and exception details.
The test suite has been switched to use Alcotest; not without some struggle due to the use of test harness and argument-dependent test suite, but the result seems like a clear improvement.
v1.6.0 - 2021-06-10
Set the time zone of PostgreSQL connections to UTC to mitigate an undesirable implicit conversion to the local time zone for timestamp. This issue was exposed by the specification of field types introduced in version 1.4.0. Earlier versions worked as expected, if only accidentally, since the time zone is ignored when a string is converted to a timestamp. While this change makes timestamp more usable again for storing UTC time stamps, I strongly recommend using timestamp with time zone since it's interpretation is unambiguous. The API reference is now updated with details about how the ptime OCaml type is mapped for different database systems.
Drop specification of OCaml string as SQL text for PostgreSQL. This is due to issues with implicit conversions and function overloading when the desired type on the SQL side is char, varchar, or jsonb.
Add Caqti_type.redact to protect sensitive information from being logged.
Only log parameters if $CAQTI_DEBUG_PARAM is set to "true".
When logging requests, show underlying values for custom types.
Reject multi-row response in find_opt implementation for sqlite3.
Tolerate Lwt promise rejections in Pool.use.
v1.5.1 - 2021-04-18
Fix option recognition in PostgreSQL driver (GPR#67 mefyl).
Fix option recognition in MariaDB driver and add test (Petter A. Urkedal).
v1.5.0 - 2021-04-11
Request the full UTF-8 character for the MariaDB connection.
Support int16 and enum types for parameters and rows.
v1.4.0 - 2021-03-11
Fix infinite loop when deserializing an optional tuple (GPR#63 mefyl).
Add Caqti_connect_sig.S.with_connection (GPR#61 Anton Bachin).
Pass parameter types to PostgreSQL prepare and query functions. This avoids the need to CAST parameters on the SQL side in some cases.
Add ?post_connect callback to connect_pool.
Documentation fixes and improvements (Aaron L. Zeng, Anton Bachin, Petter A. Urkedal).
v1.3.0 - 2021-01-17
Implement affected_count for sqlite backend (GPR#46 jakob).
Add method exec_with_affected_count to Caqti_connection_sig.S (GPR#45 jakob).
Add ?max_idle_size to pool creation functions.
Dropped dependency on ppx_deriving due to issue with static compilation (GPR#50 Ulrik Strid).
Pass through $<var>$ in query strings and deprecate $$.
Log statements to be executed at debug level.
Add COPYING.OCAML and fix license expression in opam files.
Misc improvements to tests and documentation (GPR#51 Philippe Wang, GPR#54 Reynir Björnsson, etc.).
v1.2.4 - 2020-06-07
Switch to TEXT format for PostgreSQL populate implementation.
v1.2.3 - 2020-06-02
Silence PostgreSQL notifications which were printed to stderr. They can be re-enabled with a parameter on the connection URI (#33).
Improve details in exceptions in two places.
Fix info about connection caching for sqlite in README (#35, dgllghr).
v1.2.2 - 2019-12-19
Update for core v0.13 (GPR#31 Xavier Clerc).
v1.2.1 - 2019-12-08
Support TEXT literals in queries.
Fix decoding of binary results for PostgreSQL (thanks to James Owen).
Implement copy-mode for PostgreSQL (GPR#30 James Owen).
v1.2.0 - 2019-10-02
Add a signature for the populate function, and add basic implementations for all drivers (GPR#28).
Add stream for result extraction (GPR#22 Nathan Rebours).
Use the postgres driver when postgres is specified as the URL scheme (GPR#25 James Owen).