Sobre o projeto
qbrs é um construtor de consultas SQL seguro para Rust que combina a segurança de verificação em tempo de compilação com a flexibilidade da construção dinâmica de consultas. Ao contrário de muitos construtores que forçam uma escolha entre segurança estática e dinamismo em tempo de execução, o qbrs verifica referências de colunas e junções em tempo de compilação usando uma lista plana de nível de tipo, enquanto trata o acúmulo de predicados como um vetor em tempo de execução. Isso permite que os desenvolvedores adicionem filtros ou loops condicionalmente sem precisar de escapes como `.into_boxed()` ou `.dynamic()`.
Recursos principais incluem:
- **Segurança em Tempo de Compilação**: Valida se as colunas referenciadas existem no escopo atual da consulta. Por exemplo, referenciar uma coluna de uma tabela que não foi juntada resulta em um erro de compilação.
- **Nulidade Automática**: Deriva tipos `Option<T>` para colunas no lado direito de `LEFT JOIN`s automaticamente, garantindo a correção do tipo sem anotações manuais.
- **Resultados Indexados por Coluna**: As linhas são decodificadas pelo nome da coluna, não pela posição, tornando as alterações de esquema mais seguras e o código mais legível.
- **Suporte Abrangente a SQL**: Suporta `SELECT`, `INSERT`, `UPDATE`, `DELETE`, todos os tipos de junção, `GROUP BY`, `HAVING`, agregados, `DISTINCT`, upserts, operações de conjunto (`UNION`, etc.), funções de janela, CTEs e transações.
- **Gating de Dialeto**: O dialeto SQL faz parte do tipo de consulta, permitindo verificações de capacidade (por exemplo, suporte a `RETURNING`) em tempo de construção, não em tempo de renderização.
O projeto está atualmente em estágio inicial (v0.1.0/0.2.0) e é explicitamente marcado como **não pronto para produção**. Não é um ORM; não lida com rastreamento de alterações, mapas de identidade ou mapeamento objeto-relacional. Para essas necessidades, o SeaORM é recomendado. Para SQL bruto com verificações em tempo de compilação, o sqlx é sugerido. A camada de execução do qbrs é atualmente limitada ao Postgres via `qbrs-sqlx`, embora a renderização para MySQL e SQLite seja suportada e testada no CI.
Limitações notáveis incluem a falta de alias de tabela, CTEs recursivas, bloqueio de linhas (`FOR UPDATE`) e agregados como funções de janela. A junção condicional de tabelas requer a exclusão de tipos para `DynSelect`, que é uma saída estreita. A biblioteca é de código aberto sob licença dupla MIT ou Apache-2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.