这个项目能做什么

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 双重许可。