Diesel - это один из самых популярных ORM-инструментов для языка программирования Rust, который позволяет разработчикам создавать надёжные и производительные приложения с удобной работой с базами данных. Выпуск Diesel 2.3.0 стал важной вехой для сообщества Rust, поскольку он привнёс множество значимых нововведений, которые помогают упростить процесс написания запросов, расширить функциональность и увеличить количество поддерживаемых платформ. Обновление охватывает большое количество улучшений как в синтаксисе взаимодействия с БД, так и в технических характеристиках, что делает Diesel более универсальным и удобным в применении, особенно в условиях современного кроссплатформенного развития приложений.
Одна из ключевых новинок Diesel 2.3.0 - это атрибут #[derive(HasQuery)], который значительно упрощает процесс формирования запросов. Ранее для каждой структуры данных, которая должна была быть загружена из базы, необходимо было вручную сопоставлять структуру с SQL-запросами, используя комплексные цепочки макросов как #[derive(Queryable)] и #[derive(Selectable)]. Новая функциональность позволяет напрямую связать Rust-структуру с базовым запросом FROM и даже кастомными SELECT выражениями, тем самым делая механику работы с БД более декларативной и удобной для разработчика.
Это не только повышает читаемость кода, но и уменьшает вероятность ошибок при написании сложных запросов, особенно если учесть возможность использовать JOIN-операции и оконные агрегаты непосредственно в определении структуры. Кроме того, Diesel 2.3.0 наконец-то реализовал поддержку оконных функций, которые уже давно стали стандартом в аналитической обработке данных на SQL-уровне. Оконные функции предназначены для выполнения сложных вычислений по группам строк в наборе данных без необходимости агрегации в отдельный результат, что открывает широкий спектр возможностей для аналитических запросов и построения отчетов.
В новый DSL встроены базовые окна и методы для задания оконных спецификаций - такие как partition_by, window_order и frame_by, что позволяет писать запросы с оконными функциями, полностью типобезопасно, с проверками на этапе компиляции. Более того, разработчики Diesel предоставили возможность объявлять собственные оконные функции через макрос #[declare_sql_function], что добавляет гибкости и позволяет расширять функционал без необходимости ждать обновлений библиотеки. Одной из наиболее впечатляющих возможностей версии 2.3 является поддержка работы с SQLite в среде WebAssembly (WASM). WebAssembly активно набирает популярность, позволяя запускать кроссплатформенный высокопроизводительный код в браузерах и других окружениях, не зависящих от операционной системы.
Diesel теперь позволяет компилировать свои приложения под таргет wasm32-unknown-unknown, тем самым открывая дорогу для полноценной работы с базой данных SQLite прямо внутри браузера или в других WASM-исполнителях. Это существенно расширяет спектр сценариев использования Diesel, от разработки фронтенд-приложений с локальным хранением и сложной логикой работы с данными до серверлесс-решений, где возможности локального SQL хранилища крайне важны. Хотя для полноценной работы с данными в браузере рекомендуется использовать специальные виртуальные файловые системы (VFS), базовая интеграция уже есть и развивается. В плане поддержки конкретных баз данных Diesel 2.3 развивает свои функции для PostgreSQL и SQLite, добавляя серьезную функциональность.
Для PostgreSQL реализована работа с типом MULTIRANGE - расширение, позволяющее работать с мультинтервалами, а также множество новых операторов и функций для RANGE и MULTIRANGE, что значительно облегчает работу с интервалами и диапазонами в базе. Помимо этого, Diesel расширил arsenal функций для работы с типами ARRAY и JSON/JSONB, что делает взаимодействие с PostgreSQL еще более мощным и полноценным. Возможность писать запросы с поддержкой JSON-операций на уровне ORM открывает большие перспективы для приложений с динамическими или сложными структурами данных. SQLite-бэкенд Diesel также получил долгожданную поддержку для JSON и JSONB. В отличии от PostgreSQL, SQLite не поддерживает JSON типы как колонки напрямую, однако Diesel теперь позволяет использовать функции json и jsonb для работы с соответствующими значениями, которые хранятся в тексте или бинарном формате.
Это расширяет возможности анализа и фильтрации данных в SQLite и позволяет использовать JSON для сложных манипуляций с данными прямо в базе без необходимости выгружать их и обрабатывать на стороне приложения. Пример загрузки JSON-значения через Diesel хорошо демонстрирует, что даже в сравнительно простой и компактной SQLite теперь доступна работа с современными типами данных. Все эти улучшения были результатом коллективной работы сообщества Diesel - к выпуску версии 2.3.0 приложил руку 95 человек, которые внесли свыше 1142 коммитов в течение 16 месяцев.
Благодаря поддержке и финансированию от NLNet Foundation и GitHub Open Source Fund удалось реализовать важные сложные функции, прежде всего оконные функции, которые требуют серьёзных усилий как в плане дизайна API, так и в плане тестирования и обеспечения кросс-бэкенд совместимости. Сообщество Diesel продолжает активно искать помощь и поддержку, особенно в части поддержки MySQL и MariaDB-бэкендов, которые на данный момент не имеют активных мейнтейнеров. Помимо этого, приветствуются вклады в документацию, ответы на вопросы, баг-репорты и участие в триажировании задач. Такой подход способствует развитию всех направлений проекта, делая Diesel ещё более зрелым и разнообразным ORM-инструментом. Diezel 2.
3.0 задаёт новый стандарт для Rust ORM, сочетая в себе безопасность типизации, расширяемость и современный функционал. Возможности относительно платформы WebAssembly, мощные средства для создания сложных аналитических SQL-запросов, поддержка новейших операторов и типов баз данных открывают перед разработчиками широкие горизонты для реализации проектов любой сложности. Библиотека продолжает совершенствоваться, уверенно удерживая позицию одного из лучших решений для работы с реляционными базами данных в экосистеме Rust. При вызовах к различным базам данных, будь то PostgreSQL, SQLite или ещё одна СУБД из поддерживаемых Diesel, можно рассчитывать на стабильность, производительность и удобство, которые становятся ещё лучше с каждым новым релизом.
.