프로젝트 소개
qbrs는 컴파일 시간 검증의 이점과 동적 쿼리 구성의 유연성을 결합한 Rust용 타입 안전 SQL 쿼리 빌더입니다. 정적 안전성과 런타임 동적성 사이에서 선택을 강요하는 많은 빌더와 달리, qbrs는 평면적인 타입 수준 목록을 사용하여 열과 조인 참조를 컴파일 시간에 검사하면서, 술어 누적은 런타임 벡터로 처리합니다. 이를 통해 개발자는 `.into_boxed()`나 `.dynamic()`과 같은 탈출구를 사용할 필요 없이 필터를 조건부로 추가하거나 루프를 실행할 수 있습니다.
주요 기능은 다음과 같습니다:
- **컴파일 시간 안전성**: 참조된 열이 현재 쿼리 범위 내에 존재하는지 검증합니다. 예를 들어, 조인되지 않은 테이블의 열을 참조하면 컴파일 오류가 발생합니다.
- **자동 널 가능성**: `LEFT JOIN`의 오른쪽 열에 대해 자동으로 `Option<T>` 타입을 유도하여, 수동 주석 없이도 타입 정확성을 보장합니다.
- **열 기반 결과**: 행은 위치가 아닌 열 이름으로 디코딩되어, 스키마 변경이 더 안전하고 코드가 더 읽기 쉬워집니다.
- **포괄적인 SQL 지원**: `SELECT`, `INSERT`, `UPDATE`, `DELETE`, 모든 조인 유형, `GROUP BY`, `HAVING`, 집계, `DISTINCT`, upsert, 집합 연산(`UNION` 등), 윈도우 함수, CTE, 트랜잭션을 지원합니다.
- **방언 게이팅**: SQL 방언은 쿼리 타입의 일부이므로, 렌더링 시간이 아닌 빌드 시간에 기능 검사(예: `RETURNING` 지원)를 수행할 수 있습니다.
이 프로젝트는 현재 초기 단계(v0.1.0/0.2.0)이며, 명시적으로 **생산 준비가 되지 않았음**으로 표시되어 있습니다. ORM이 아니므로, 변경 추적, 아이덴티티 맵, 객체 관계 매핑을 처리하지 않습니다. 이러한 기능이 필요하다면 SeaORM을, 컴파일 시간 검사를 갖춘 원시 SQL이 필요하다면 sqlx를 사용하는 것이 좋습니다. qbrs 실행 레이어는 현재 `qbrs-sqlx`를 통해 Postgres로만 제한되어 있지만, MySQL과 SQLite 렌더링은 지원되며 CI에서 테스트되고 있습니다.
눈에 띄는 제한 사항으로는 테이블 별칭 없음, 재귀 CTE 없음, 행 잠금(`FOR UPDATE`) 없음, 윈도우 함수로서의 집계 없음 등이 있습니다. 테이블의 조건부 조인은 타입을 `DynSelect`로 지워야 하며, 이는 좁은 탈출구입니다. 이 라이브러리는 MIT 또는 Apache-2.0 라이선스로 듀얼 라이선스되어 있습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.