Diesel 2.0.0 已正式发布。据称此版本开发周期长达 3 年,包含了超过 1700 次 commit。
Diesel 是一个安全可扩展的 Rust ORM 框架和查询构建工具。Diesel 可避免运行时错误,提供最好的性能。
2.0 添加了许多新功能,并重写了大部分内部结构。由于这是新的大版本,它还包含许多破坏性变化,具体处理方案可查看迁移指南。
更新亮点
- 支持完全类型检查的
GROUP BY
- 支持表别名
- 支持通过相应类型定义 select 子句
- 支持
UNION
/INTERSECT
查询
此外,Diesel 2.0.0 还修复了类级别(type level) SQL 表示中的几个问题,它现在可以正确处理以下情况:
- 混合嵌套
LEFT JOINS
和INNER JOINS
- 通过
AND
,OR
和类似的运算符链接混合的可空表达式 (nullable expressions)
支持GROUP BY
子句
Diesel 2.0 添加了对GROUP BY
子句的支持,用于 select 查询。
示例
users::table.inner_join(posts::table)
.group_by(users::id)
.select((users::name, count(posts::id)))
支持表别名
以下查询展示了此功能:
// Define new table alias for the existing `users` table
let users1 = diesel::alias!(schema::users as user1);
// Use the corresponding alias inside any existing query
users::table
.inner_join(users1.on(users::id).eq(users1.field(users::id))))
.select((users::id, users::name, users1.field(users::name)))
.order_by(users1.field(users::id))
支持UNION
/INTERSECT
查询
此功能轻松地将多个查询链接在一起,只要它们返回相同类型的字段。
users.select(user_name.nullable())
.union(animals.select(animal_name).filter(animal_name.is_not_null()))
Release Note | Changelog