This release includes a several large extensions to the query DSL provided by Diesel and also helps increases the number of platforms you can use Diesel on out of the box. Notable changes include:
- Improved query construction via #[derive(HasQuery)]
- Added support for window functions
- Using SQLite with WASM in your browser
- Extended support for various types, functions and operators in the PostgreSQL backend
- Support for JSONandJSONBin the SQLite backend
See the release blog for the full announcement
You can support the development of Diesel by:
- Contributing Code, Documentation or Guides. Checkout the planing for Diesel 2.4 for open tasks.
- Providing knowledge and help to maintain the MySQL/MariaDB backend. This is currently the only in-tree backend that is not used by any maintainers, so having someone around that actually uses this backend would be very helpful for the Diesel project.
- Answering questions in our discussion forum
- Reporting bugs in our issue tracker
- Helping triaging issues in our issue tracker
- Sponsoring the maintainers.
Added
- Added limit()andoffset()DSL to combination clauses such asUNION
- Fixed #[derive(Identifiable)]ignoring attribute#[diesel(serialize_as)]on primary keys
- Added embedded struct support for AsChangesetvia#[diesel(embed)]
- Added a #[diesel(skip_update)]attribute for theAsChangesetderive to skip updating a field present in the struct
- Support for libsqlite3-sys 0.35.0
- Add support for built-in PostgreSQL range operators and functions
- Support for postgres multirange type
- Added diesel::r2d2::TestCustomizer, which allows users to customize theirdiesel::r2d2::Pools in a way that makes the pools suitable for use in parallel tests.
- Added support for built-in PostgreSQL range operators and functions
- Added support for various built-in PostgreSQL array functions
- Added JsonandJsonbsupport for the SQLite backend.
- Added a #[diesel::declare_sql_function]attribute macro to easily define support for multiple sql functions at once via anextern "SQL"block
- Support [print_schema] allow_tables_to_appear_in_same_query_config = "fk_related_tables"to generate separateallow_tables_to_appear_in_same_query!calls containing only tables that are related through foreign keys. (Default:"all_tables".) It is not possible to build queries using two tables that don't appear in the sameallow_tables_to_appear_in_same_query!call, but that macro generates O(n²) rust code, so this option may be useful to reduce compilation time. (#4333)
- Added wasm32-unknown-unknowntarget support for sqlite backend.
- Add support for the CASToperator
- Support [print_schema] allow_tables_to_appear_in_same_query_config = "none"to generate noallow_tables_to_appear_in_same_query!calls. (Default:"all_tables".). (#4333)
- Add [print_schema] pg_domains_as_custom_typesparameter to generate custom types for PostgreSQL domains that matches any of the regexes in the given list. (Default:[].) This option allows an application to selectively give special meaning for the serialization/deserialization of these types, avoiding the default behavior of treating the domain as the underlying type. (#4592)
- Add support for batch insert and upsert statements with returning for SQLite
- Add support for window functions and aggregate expressions.
Fixed
- Fixed diesel thinking a.eq_any(b)was non-nullable even ifaandbwere nullable.
- Generate InstrumentationEvent::BeginTransactionfor immediate and exclusive transactions in SQLite
- Use a single space instead of two spaces between DELETE FROM.
- Diesel CLI now ensures that migration versions are always unique. If it fails to generate a unique version, it will return an error. The new version format remains compatible with older Diesel versions.
- Updated ipnetworkto allow version 0.21.
Changed
- Use distinct DIESEL_LOGlogging filter env variable instead of the defaultRUST_LOGone (#4575)
- The minimal supported Rust version is now 1.86.0
Full Changelog: https://github.com/diesel-rs/diesel/compare/v2.2.0...v2.3.0