À propos du projet

Scythe est un outil en ligne de commande qui traite SQL comme un langage de premier ordre. Il analyse statiquement les fichiers .sql annotés et génère un code d’accès base de données sûr quant aux types — types de lignes, fonctions de requête et mappages de types — pour dix langages de programmation (Rust, Python, TypeScript, Go, Java, Kotlin, C#, Elixir, Ruby, PHP, ainsi que JavaScript pur) sur dix moteurs de bases de données (PostgreSQL, MySQL, MariaDB, SQLite, DuckDB, CockroachDB, MSSQL, Oracle, Redshift, Snowflake). La génération ne nécessite ni connexion à une base de données ni réseau, ce qui la rend adaptée aux crochets pre-commit. Les fonctionnalités clés incluent : - Inférence de types : la nullabilité est propagée via les JOIN, CTE, fonctions fenêtrées, COALESCE, CASE WHEN et agrégats. Les énumérations, composites, tableaux et JSON sont mappés vers les types natifs des langages. - Linting et audit : 24 règles de lint (par exemple, UPDATE sans WHERE, SELECT *) et 35 règles d’audit pour la sécurité et la sûreté des migrations (par exemple, GRANT à PUBLIC, mots de passe littéraux, DDL destructif). Sortie aux formats human, SARIF ou JSON. - Vérification de provenance : scythe check vérifie que le code généré et validé correspond au SQL dont il provient, avec des vérifications optionnelles en direct de dérive de schéma sur PostgreSQL. - Inspection de base de données : scythe inspect réalise des bilans de santé en direct (par exemple, clés étrangères sans index couvrants, RLS désactivée) pour PostgreSQL et MySQL/MariaDB. - Sortie flexible : types de lignes sous forme de Pydantic, msgspec, dataclasses, schémas Zod ou interfaces simples ; substitutions de types pour les types d’extension comme ltree, citext ou PostGIS. - Annotations : au-delà de :one/:many, prend en charge @optional pour les filtres conditionnels, :batch pour les opérations groupées et @returns :grouped pour les résultats imbriqués. - Migration depuis sqlc : scythe migrate convertit les configurations sqlc.yaml existantes. Les options d’installation incluent cargo, Homebrew, npm, pip et une GitHub Action. Des crochets pre-commit sont fournis pour le formatage, le linting, l’audit, l’inspection, la génération et la vérification. L’outil est sous licence MIT et documenté sur goldziher.github.io/scythe.