Релиз Diesel 2.3.0

good-penguin.png

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.

>>> Подробности

©  Linux.org.ru