Sobre o projeto
Scythe é uma ferramenta de linha de comando que trata SQL como linguagem de primeira classe. Ela analisa estaticamente arquivos `.sql` anotados e gera código de acesso a banco de dados com segurança de tipos — tipos de linha, funções de consulta e mapeamentos de tipos — para dez linguagens de programação (Rust, Python, TypeScript, Go, Java, Kotlin, C#, Elixir, Ruby, PHP, além de JavaScript puro) em dez mecanismos de banco de dados (PostgreSQL, MySQL, MariaDB, SQLite, DuckDB, CockroachDB, MSSQL, Oracle, Redshift, Snowflake). A geração não requer conexão com banco de dados nem rede, tornando-a adequada para hooks de pre-commit.
Recursos principais incluem:
- **Inferência de tipos**: nulidade é propagada por JOINs, CTEs, funções de janela, COALESCE, CASE WHEN e agregações. Enums, tipos compostos, arrays e JSON são mapeados para tipos nativos da linguagem.
- **Lint e auditoria**: 24 regras de lint (por exemplo, UPDATE sem WHERE, SELECT *) e 35 regras de auditoria para segurança e segurança de migrações (por exemplo, GRANT para PUBLIC, senhas literais, DDL destrutivo). Saída em formatos humano, SARIF ou JSON.
- **Verificação de procedência**: `scythe check` verifica se o código gerado incluído no repositório corresponde ao SQL que o originou, com verificações opcionais de divergência de schema ao vivo no PostgreSQL.
- **Inspeção de banco de dados**: `scythe inspect` realiza verificações de saúde ao vivo (por exemplo, chaves estrangeiras sem índices de cobertura, RLS desativado) para PostgreSQL e MySQL/MariaDB.
- **Saída flexível**: tipos de linha como Pydantic, msgspec, dataclasses, schemas Zod ou interfaces simples; substituições de tipos para tipos de extensões como ltree, citext ou PostGIS.
- **Anotações**: além de `:one`/`:many`, suporta `@optional` para filtros condicionais, `:batch` para operações em lote e `@returns :grouped` para resultados aninhados.
- **Migração do sqlc**: `scythe migrate` converte configurações existentes de `sqlc.yaml`.
As opções de instalação incluem cargo, Homebrew, npm, pip e uma GitHub Action. Hooks de pre-commit são fornecidos para formatação, lint, auditoria, inspeção, geração e verificação. A ferramenta é licenciada sob MIT e documentada em goldziher.github.io/scythe.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.