Об этом проекте

Scythe — это инструмент командной строки, который рассматривает SQL как полноценный язык. Он статически анализирует аннотированные файлы `.sql` и генерирует типобезопасный код доступа к базам данных — типы строк, функции запросов и отображения типов — для десяти языков программирования (Rust, Python, TypeScript, Go, Java, Kotlin, C#, Elixir, Ruby, PHP, а также чистый JavaScript) и десяти движков баз данных (PostgreSQL, MySQL, MariaDB, SQLite, DuckDB, CockroachDB, MSSQL, Oracle, Redshift, Snowflake). Генерация не требует подключения к базе данных или сети, что делает её пригодной для pre-commit хуков. Ключевые возможности: - **Вывод типов**: Nullability распространяется через JOIN, CTE, оконные функции, COALESCE, CASE WHEN и агрегаты. Перечисления, композитные типы, массивы и JSON отображаются в нативные типы языков. - **Линтинг и аудит**: 24 правила линтинга (например, UPDATE без WHERE, SELECT *) и 35 правил аудита для безопасности и безопасности миграций (например, GRANT для PUBLIC, пароли в виде литералов, деструктивные DDL). Вывод в форматах human, SARIF или JSON. - **Проверка происхождения**: `scythe check` проверяет, что закоммиченный сгенерированный код соответствует SQL, из которого он получен, с опциональными проверками дрейфа живой схемы для PostgreSQL. - **Инспекция базы данных**: `scythe inspect` выполняет живые проверки работоспособности (например, внешние ключи без покрывающих индексов, отключённый RLS) для PostgreSQL и MySQL/MariaDB. - **Гибкий вывод**: типы строк в виде Pydantic, msgspec, dataclasses, схем Zod или простых интерфейсов; переопределения типов для расширенных типов, таких как ltree, citext или PostGIS. - **Аннотации**: помимо `:one`/`:many`, поддерживает `@optional` для условных фильтров, `:batch` для массовых операций и `@returns :grouped` для вложенных результатов. - **Миграция из sqlc**: `scythe migrate` преобразует существующие конфигурации `sqlc.yaml`. Варианты установки включают cargo, Homebrew, npm, pip и GitHub Action. Предоставлены pre-commit хуки для форматирования, линтинга, аудита, инспекции, генерации и проверки. Инструмент распространяется под лицензией MIT и документирован на goldziher.github.io/scythe.