NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2083 most downloaded on crates.io
Internal diesel crate
Last release 1 years ago
12 Sep 2025
Ships on a steady schedule
a new release about every 1.1 years
Nearly every release is documented
notes for 3 of 3 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
3 releases · first in 2023
One column per quarter.
.save_changes (generated by #[changeset_for]) now returns a new struct, rather than mutating self. The returned struct can be any type that implements
#[changeset_for(table)] now treats Option fields as an optional update.
Previously a field with None for the value would insert NULL into the
database field. It now does not update the field if the value is None.
.save_changes (generated by #[changeset_for]) now returns a new struct,
rather than mutating self. The returned struct can be any type that
implements Queryable for the right SQL type
#[derive(Queryable)] now allows generic parameters on the struct.
Table definitions can now support up to 26 columns. Because this increases our
compile time by 3x, features = ["large-tables"] is needed to support table
definitions above 16 columns.
Quickcheck is now an optional dependency. When features = ["quickcheck"] is
added to Cargo.toml, you'll gain Arbitrary implementations for everything
in diesel::data_types.
Added support for the SQL MIN function.
Added support for the Numeric data type. Since there is no Big Decimal type
in the standard library, a dumb struct has been provided which mirrors what
Postgres provides, which can be converted into whatever crate you are using.
Timestamp columns can now be used with std::time::SystemTime when compiled
with --features unstable
Implemented Send on Connection (required for R2D2 support)
Added infer_schema! and infer_table_from_schema!. Both macros take a
database URL, and will invoke table! for you automatically based on the
schema. infer_schema! queries for the table names, while
infer_table_from_schema! takes a table name as the second argument.
Connection#insert and Connection#insert_returning_count have been deprecated in favor of [insert][insert]
Added an execute method to QueryFragment, which is intended to replace
Connection#execute_returning_count. The old method still exists for use
under the hood, but has been hidden from docs and is not considered public
API.
Added get_result and get_results, which work similarly to load and
first, but are intended to make code read better when working with commands
like create and update. In the future, get_result may also check that
only a single row was affected.
Added [insert][insert], which mirrors the pattern of update and delete.
Added a hidden __Nonexhaustive variant to result::Error. This is not
intended to be something you can exhaustively match on, but I do want people
to be able to check for specific cases, so Box<std::error::Error> is
not an option.
query_one, find, and first now assume a single row is returned. For
cases where you actually expect 0 or 1 rows to be returned, the optional
method has been added to the result, in case having a Result<Option<T>> is
more idiomatic than checking for Err(NotFound).
Connection#insert and Connection#insert_returning_count have been
deprecated in favor of [insert][insert][0.2.0]: https://github.com/diesel-rs/diesel/compare/v0.1.0...v0.2.0 [0.3.0]: https://github.com/diesel-rs/diesel/compare/v0.2.0...v0.3.0 [0.4.0]: htt
Your coding agent can read these notes before it upgrades. Set up the MCP server →