SuperAPI AI 工具集

sqlx-knowledge-patch

数据与分析

查看项目

更新于 10-16 01:35

技能介绍

用途:在改动 SQLx 相关代码前先查阅的知识补丁,基线为 SQLx 0.7.x,覆盖 0.8.0 至 0.9.0-changelog 批次。涉及后端特有行为时应查看详细参考文件。

主要能力与要点:

  1. 工具链:0.9 要求 Rust 1.94.0,仓库不再跟踪 Cargo.lock,旧的 cargo install --locked sqlx-cli 不再适用,需去掉 --locked 或自行维护锁文件。
  2. 运行时与 TLS:0.8 软弃用、0.9 移除组合特性,需分别选择运行时与 TLS,如 runtime-tokio 与 tls-rustls-ring-native-roots;runtime-smol、runtime-async-global-executor 取代已弃用的 async-std。
  3. 动态查询:query*() 接受 impl SqlSafeStr,动态拼接 SQL 须用 sqlx::AssertSqlSafe 包裹,值应参数化,该包装是显式信任边界。
  4. 类型签名变化:RawSql 方法增加 DB 类型参数;Arguments、SqliteArguments、AnyArguments 去掉生命周期参数;PgAdvisoryLockGuard 去掉生命周期;Migrate trait 有重大变化;resolve_blocking() 隐藏且不受 SemVer 保证。
  5. SQLite:SqliteValue 变为 !Sync,SqliteValueRef 变为 !Send;同一值以借用形式解码后再按其他类型解码会报错。
  6. PostgreSQL:#[derive(sqlx::Type)] 为新类型结构体生成 PgHasArrayType,可用 #[sqlx(no_pg_array)] 关闭;PgConnectOptions::options() 自行转义;.pgpass 反斜杠转义被解码;tracing 字段更名为 acquired_after_secs。
  7. 配置:0.9 新增每 crate 的 sqlx.toml,可重命名 DATABASE_URL、定义全局宏类型覆盖、重命名或迁移 _sqlx_migrations、排除迁移哈希字符;库用户需启用 sqlx-toml 特性;显式 SQLX_OFFLINE_DIR 优先;offline 特性可选。
  8. SQLite 链接:0.8 起默认捆绑静态链接,可用 sqlite-unbundled 链接系统库,需构建期 SQLite,建议 3.20.0 以上,可能调用 bindgen。可选特性包括 sqlite-preupdate-hook、sqlite-deserialize、sqlite-load-extension(不安全)、sqlite-unlock-notify。
  9. 查询与类型:PostgreSQL query!() 强制通用计划推断可空性,升级后需复核生成类型;Encode/Decode/Type 支持 Box、Arc、Rc、Cow,解码 Cow 总得到 Cow::Owned;PostgreSQL 支持嵌套 domain,透明派生适用于单字段命名结构体。
  10. 数据库差异:PostgreSQL 可启用 ipnet 映射 INET/CIDR;MySQL 明文连接需启用 mysql-rsa,非二进制文本列可能由 Vec<u8> 推断为 String,发送 SET NAMES utf8mb4 不强制排序规则,调用 charset()/collation() 会自动启用 set_names。
  11. 迁移:支持 no_tx、跳过迁移、Migrator::with_migrations();set_ignore_missing() 与 set_locking() 现返回 &mut Self。

使用方式:按升级清单逐项核查——升级 Rust 版本、清理安装命令、替换组合特性、决定 sqlx-toml 与 offline、包裹动态 SQL、更新生命周期与迁移 trait、审计 PgHasArrayType 重复实现、复核 query!() 可空性与 MySQL 文本推断、审计 SQLite 线程跨越与扩展加载安全、移除手动转义并更新 tracing 字段名。

限制:资料未提供具体版本发布日期、性能数据或价格信息,暂未提供。