返回顶部
s

sqlx-code-reviewsqlx代码审查

Reviews sqlx database code for compile-time query checking, connection pool management, migration patterns, and PostgreSQL-specific usage. Use when reviewing Rust code that uses sqlx, database queries, connection pools, or migrations. Covers offline mode, type mapping, and transaction patterns.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
92
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

sqlx-code-review

sqlx 代码审查

审查工作流程

  1. 1. 检查 Cargo.toml — 注意 sqlx 特性(runtime-tokio、tls-rustls/tls-native-tls、postgres/mysql/sqlite、uuid、chrono、json、migrate)和 Rust 版本(2024 版更改了 RPIT 生命周期捕获,不再需要 async-trait)
  2. 检查查询模式 — 编译时检查(query!、queryas!)与运行时检查(query、queryas)
  3. 检查连接池配置 — 连接限制、超时设置、空闲设置
  4. 检查迁移 — 文件命名、可逆性、数据迁移安全性
  5. 检查类型映射 — Rust 类型与 SQL 列类型对齐

输出格式

按以下格式报告发现:

text
[文件:行号] 问题标题
严重级别:严重 | 主要 | 次要 | 参考信息
问题描述及其重要性说明。

快速参考

问题类型参考文档
查询宏、绑定参数、结果映射references/queries.md
迁移、连接池配置、事务模式
references/migrations.md |

审查清单

查询模式

  • - [ ] 尽可能使用编译时检查的查询(query!、queryas!)
  • [ ] 配置了 sqlx.toml 或 DATABASEURL 用于离线编译时检查
  • [ ] 查询中没有字符串插值(SQL 注入风险)—— 使用绑定参数($1、$2)
  • [ ] 对于公共 API,queryas! 映射到命名结构体,而非匿名记录
  • [ ] 适当选择 .fetchone()、.fetchoptional()、.fetchall()
  • [ ] 对于大型结果集使用 .fetch()(流式处理)

连接池

  • - [ ] 通过 Arc 或框架状态共享 PgPool(非每次请求创建)
  • [ ] 根据部署环境配置连接池大小(生产环境不保留默认值)
  • [ ] 设置了连接获取超时
  • [ ] 配置了空闲连接清理
  • [ ] 2024 版:静态连接池单例使用 std::sync::LazyLock 初始化(非 oncecell::sync::Lazy 或 lazystatic!)

事务

  • - [ ] 多语句操作使用 pool.begin()
  • [ ] 显式提交事务(不依赖 drop 时的隐式回滚)
  • [ ] 事务内的错误在传播前触发回滚
  • [ ] 需要时使用保存点(tx.begin())处理嵌套事务

类型映射

  • - [ ] sqlx::Type 派生与数据库列类型匹配
  • [ ] Rust、serde 和 SQL 之间的枚举表示一致
  • [ ] 使用 Uuid、DateTime、Decimal 类型(非字符串表示结构化数据)
  • [ ] 可空列使用 Option
  • [ ] JSONB 列使用 serde_json::Value
  • [ ] 没有名为 gen 的枚举变体或结构体字段 —— 2024 版中的保留关键字(使用 r#gen 配合 #[sqlx(rename = gen)] 或选择其他名称)

2024 版兼容性

迁移

  • - [ ] 迁移文件遵循命名约定(YYYYMMDDHHMMSS_description.sql)
  • [ ] 破坏性迁移(DROP、ALTER DROP COLUMN)可逆或有数据备份计划
  • [ ] 数据变更与依赖数据的模式变更不在同一迁移中
  • [ ] 在应用程序启动时调用 sqlx::migrate!()

严重级别校准

严重

  • - SQL 查询中的字符串插值(SQL 注入)
  • 多语句写入缺少事务(错误时部分写入)
  • 每次请求创建连接池(连接耗尽)
  • 缺少绑定参数转义

主要

  • - 在编译时查询(query!())可验证正确性的情况下使用运行时查询(query())
  • 错误路径上缺少事务回滚
  • Rust 与数据库之间的枚举类型不匹配
  • 对可能很大的表使用无限制的 .fetch_all()
  • 名为 gen 的字段或变体未使用 r#gen 转义(2024 版编译失败)

次要

  • - 生产环境使用未经调整的连接池默认值
  • 缺少 .fetchoptional()(使用 .fetchone() 然后处理未找到错误)
  • 只需特定列时使用过于宽泛的 SELECT *
  • 查询列缺少索引(仅在查询模式明显缓慢时标记)
  • 2024 版:在 std::sync::LazyLock 可用的情况下使用 oncecell::sync::Lazy 或 lazystatic!
  • 对查询字段使用 #[allow(unused)] 而非 #[expect(unused)](优先使用自清理 lint 抑制)

参考信息

  • - 建议使用 query_as! 进行类型安全的结果映射
  • 建议在 Rust 验证之外添加数据库级别约束
  • 迁移组织改进

有效模式(请勿标记)

提交发现前

在报告任何问题之前,加载并遵循 beagle-rust:review-verification-protocol。

标签

skill ai
v1.0.1 最新 2026-4-13 12:09
**Rust 2024 edition support and static pool best practices added.**

- Added review points for Rust 2024 edition: RPIT lifetime capture, use of `std::sync::LazyLock`, and reserved keyword handling (`gen`).
- Expanded checklist for type mapping and migration safety regarding edition 2024 reserved names and static pool singleton patterns.
- Clarified and extended Minor/Major findings for edition 2024-specific constructs.
- Augmented "Valid Patterns" to clarify edition 2024 compliance and new Rust language features.
- References and checklist now emphasize best practices for future Rust compatibility.

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部