프로젝트 소개

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, 집계를 통해 전파됩니다. Enum, 컴포지트, 배열, JSON은 네이티브 언어 타입으로 매핑됩니다. - **린팅 및 감사**: 24개의 린트 규칙(예: WHERE 없는 UPDATE, SELECT *)과 보안 및 마이그레이션 안전성을 위한 35개의 감사 규칙(예: PUBLIC에 대한 GRANT, 리터럴 비밀번호, 파괴적 DDL)이 있습니다. 출력은 human, SARIF, JSON 형식으로 제공됩니다. - **출처 확인**: `scythe check`는 커밋된 생성 코드가 원본 SQL과 일치하는지 검증하며, PostgreSQL에 대한 선택적 라이브 스키마 드리프트 검사도 수행합니다. - **데이터베이스 검사**: `scythe inspect`는 PostgreSQL 및 MySQL/MariaDB에 대해 라이브 상태 검사(예: 커버링 인덱스가 없는 외래 키, RLS 비활성화)를 수행합니다. - **유연한 출력**: 행 타입을 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에서 문서를 제공합니다.