Об этом проекте
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.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.