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
JSON
andJSONB
in 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
AsChangeset
via#[diesel(embed)]
- Added a
#[diesel(skip_update)]
attribute for theAsChangeset
derive 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::Pool
s
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
Json
andJsonb
support 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-unknown
target support for sqlite backend. - Add support for the
CAST
operator - 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_types
parameter 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 ifa
andb
were nullable. - Generate
InstrumentationEvent::BeginTransaction
for 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
ipnetwork
to allow version 0.21.
Changed
- Use distinct
DIESEL_LOG
logging filter env variable instead of the defaultRUST_LOG
one (#4575) - The minimal supported Rust version is now 1.86.0
Full Changelog: v2.2.0...v2.3.0