Релиз Diesel 2.3.0

Diesel — это безопасный, высокопроизводительный и расширяемый ORM и генератор SQL-запросов для языка Rust. Diesel гарантирует корректность генерируемых SQL-запросов и совместимость между типами, используемыми в коде приложения, и типами в БД. Код, который сгенерировал бы падающий запрос, попросту не скомпилируется. При этом, Diesel является zero-cost абстракцией: производительность кода, использующего Diesel такая же, как производительность кода на C, напрямую вызывающего SQL-запросы.
Новый макрос #[derive (HasQuery)]
Позволяет использовать структуру напрямую для генерации SQL-запроса.
use crate::schema::users;
#[derive(HasQuery)]
struct User {
id: i32,
name: String,
}
let users = User::query().load(connection)?
Раньше для в этом случае нужно было применять дерайвы Queryable и Selectable и использовать более громоздкий вызов users::table.select(User::as_select())
Поддержка оконных функций
Наконец-то Diesel поддерживает из коробки генерацию SQL с оконными функциями. Например, код
employees::table
.select(
dsl::rank()
.partition_by(employees::department)
.window_order(employees::salary.desc())
.frame_by(dsl::frame::Rows.frame_starts_with(dsl::frame::UnboundedPreceding))
)
сгенерирует следующий SQL-запрос:
SELECT
RANK() OVER(PARTITION BY department ORDER BY salary DESC ROWS UNBOUNDED PRECEDING
FROM
employees
Разумеется, есть поддержка определений новых оконных функций:
#[declare_sql_function]
extern "SQL" {
#[window]
fn row_number() -> BigInt;
}
Поддержка SQLite в WASM
Diesel теперь поддерживает SQLite в любом WASM-рантайме, включая веб-браузеры.
Поддержка дополнительных типов для PostgreSQL
Добавлена поддержка типов RANGE и MULTIRANGE и операций над этими типами.
Поддержка JSON и JSONB для SQLite
Добавлена поддержка типов и функций JSON и JSONB для SQLite.
>>> Подробности
