Diesel 2.1.0 发布,Rust ORM 框架
Diesel 2.1.0 已正式发布,此版本开发周期总共 9 个月,42 名贡献者提交了超过 380 个 commit。
Diesel 是一个安全可扩展的 Rust ORM 框架和查询构建工具。Diesel 可避免运行时错误,提供最好的性能。
2.1.0 引入了多项新特性,并改进了现有功能。它引入了对通过 Diesel CLI 根据schema.rs
文件和数据库之间的差异生成迁移的支持信息。
Diesel derived 现在提供了一个#[derive(MultiConnection)]
derive 宏,允许轻松地将不同的数据库连接组合成一个单独的枚举,可自己实现Connection
。 MySQL 后端通过ON DUPLICATE KEYS
语法获得对upsert
查询的支持。
此外还提供了新工具来改进为常见错误情况生成的复杂错误消息。详情查看 Changelog。
2.x 系列重写了大部分内部结构。因此这是新的大版本,它还包含许多破坏兼容性的变化,具体处理方案查看迁移指南。
更新亮点
- 支持
MultiConnection
Diesel 现在包含一个 #[derive(MultiConnection)]
proc 宏派生,它允许在单个应用程序中轻松支持多个数据库后端。它可以应用于不同连接的枚举:
#[derive(diesel::MultiConnection)] pub enum AnyConnection { Postgresql(diesel::PgConnection), Mysql(diesel::MysqlConnection), Sqlite(diesel::SqliteConnection), }
之后 AnyConnection
类型可以用作普通连接:
fn use_multi(conn: &mut AnyConnection) -> QueryResult<()> { // Use the connection enum as any other connection type // for inserting/updating/loading/… diesel::insert_into(users::table) .values(users::name.eq("Sean")) .execute(conn)?; let users = users::table.load::<(i32, String)>(conn)?; Ok(()) }
- 对 MySQL 后端的 Upsert 支持
Diesel 2.1 使用现有的upsert
框架添加了对MySQL 后端INSERT INTO … ON DUPLICATE KEYS …
查询的支持。现在支持使用 diesel 提供的 DSL 编写此类查询:
diesel::insert_into(users) .values(&user2) .on_conflict(diesel::dsl::DuplicatedKeys) .do_update() .set(name.eq("I DONT KNOW ANYMORE")) .execute(conn)?;
- 改进错误信息
此版本改进了 rustc 为常见的 Diesel 问题生成的错误消息。
比如下面的示例:
table! { users { id -> Integer, name -> Text, } } #[derive(Queryable)] struct User { name: String, id: i32, } users::table.load::<User>(&mut conn)
将生成以下错误消息:
error[E0277]: the trait bound `(diesel::sql_types::Integer, diesel::sql_types::Text): load_dsl::private::CompatibleType<User, Mysql>` is not satisfied --> src/main.rs:20:31 | 20 | users::table.load::<User>(&mut conn); | ---- ^^^^^^^^^ the trait `load_dsl::private::CompatibleType<User, Mysql>` is not implemented for `(diesel::sql_types::Integer, diesel::sql_types::Text)` | | | required by a bound introduced by this call | = help: the following other types implement trait `load_dsl::private::CompatibleType<U, DB>`: (ST0, ST1) (ST0, ST1, ST2) (ST0, ST1, ST2, ST3) (ST0, ST1, ST2, ST3, ST4) (ST0, ST1, ST2, ST3, ST4, ST5) (ST0, ST1, ST2, ST3, ST4, ST5, ST6) (ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7) (ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8) and 24 others = note: required for `users::table` to implement `LoadQuery<'_, _, User>` note: required by a bound in `diesel::RunQueryDsl::load` --> /home/weiznich/.cargo/git/checkouts/diesel-6e3331fb3b9331ec/ef6252e/diesel/src/query_dsl/mod.rs:1543:15 | 1543 | Self: LoadQuery<'query, Conn, U>, | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `diesel::RunQueryDsl::load`
在新版本则生成以下错误信息:
error[E0277]: the trait bound `i32: FromSql<diesel::sql_types::Text, Mysql>` is not satisfied --> src/main.rs:13:11 | 13 | name: i32, | ^^^ the trait `FromSql<diesel::sql_types::Text, Mysql>` is not implemented for `i32` | = help: the trait `FromSql<diesel::sql_types::Integer, Mysql>` is implemented for `i32` = note: required for `i32` to implement `diesel::Queryable<diesel::sql_types::Text, Mysql>` = note: required for `i32` to implement `FromSqlRow<diesel::sql_types::Text, Mysql>` = help: see issue #48214

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GCC 11.4 发布,修复了 110 多个错误
GCC 11.4 作为修复版本发布了 ,这版本修复了大量社区报告的问题。 GCC 11.3 在一年多之前发布,因此 GCC 11.4 覆盖了 2022 至今的向后移植错误/回归修复内容。修复的问题主要是一些 C 复合体代码的编译时间较长、特定条件下的编译错误问题、一些类型处理错误问题。 整体 Bug 比较琐碎,在此不一一列举,可以在 GCC Bugzilla 中查看所有修复项。 GCC 11.4 可以在 gcc 官网下载。但对于那些想要最新编译器功能、扩展 CPU 支持和优化的人来说,更推荐使用 GCC 13.1 版本,GCC 13.1 拥有如 Modula-2 语言前端等最新功能。
- 下一篇
pnpm v8.6 发布,软件包管理器
pnpm 是一个快速、节省磁盘空间的软件包管理器。它使用一个内容可寻址的文件系统来存储磁盘上所有模块目录的所有文件。当使用 npm 或 Yarn 时,如果你有 100 个使用 lodash 的项目,你将在磁盘上有 100 份 lodash 的拷贝,而使用 pnpm 时,lodash 将被存储在一个内容可寻址的存储器中。 pnpm 8.6 正式发布,更新内容如下: 改动 一些设置会影响 lockfile 的结构,所以如果这些设置发生变化,我们不能重复使用 lockfile。因此,我们需要在锁文件中存储这些设置。这样我们就能知道锁文件是在哪些设置下创建的。 现在在锁文件中会出现一个新的字段:settings。它将存储两个设置的值: autoInstallPeers和 excludeLinksFromLockfile。如果有人试图执行 frozen-lockfile 的安装,而他们的活动设置与锁文件中的设置不匹配,那么就会有一个错误信息被抛出。 现在支持一个新的设置 —— exclude-links-from-lockfile)。启用后,本地链接的依赖关系的指定器不会在锁文件中重复出现。 补...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作