Files
胡飞 d240c3cec1 fix(db): beta 构建也能加载外部驱动(预发布版本匹配)
SemVer 规定带预发布标识的版本不满足不含预发布标识的范围,
`0.23.0-beta.5` 因此不被驱动清单的 `>=0.10.0` 匹配,导致所有 beta /
dev 构建把已安装的外部驱动全部跳过(国产数据库类目为空,TDengine /
ClickHouse 这两个改由驱动提供的类型也一起失效)。

- `check_host_compatibility` 增加 `host_version_satisfies`:宿主是预发布
  版本时先按原范围匹配,再退回 release 三元组匹配一次。
- 范围自身带预发布标识时不做回退(`>=0.23.0-beta.6` 不会被放宽成
  `>=0.23.0`),保持 SemVer 严格语义。
- 单测覆盖 beta 宿主 + `>=0.10.0`、以及预发布范围不被回退绕过两种场景。
2026-11-05 16:04:11 +08:00
..

Database Abstraction Layer

这个 crate 提供了一个统一的数据库抽象层,支持多种数据库类型。

架构

  • src/ - 顶层接口和公共类型

    • plugin.rs - DatabasePlugin trait 与数据库能力入口
    • plugin_manifest.rs - 数据库 UI manifest 合同,承载表单、能力位、动作元数据
    • manager.rs - 数据库管理器
    • connection.rs - 连接接口和连接池
    • executor.rs - SQL 执行器
    • runtime.rs - Tokio 运行时
    • types.rs - 公共类型定义
  • src/mysql/ - MySQL 实现

  • src/postgresql/ - PostgreSQL 实现

  • src/sqlite/ - SQLite 实现

crates/db 现在同时负责两层职责:

  • 数据库运行时能力:连接、元数据、SQL 构建、导入导出
  • 数据库 UI 合同:ui_manifest() 返回纯数据 manifest,供 db_view 做统一渲染

新增数据库插件时,除了实现 DatabasePlugin 的运行时方法,也应在插件侧返回 对应的 DatabaseUiManifest,并通过 resolve_reference_data() 提供动态下拉数据 (如 charset / collation / engines)。

使用示例

use db::{DbManager, DatabaseType, DbConnectionConfig};

let manager = DbManager::new();
let plugin = manager.get_plugin(&DatabaseType::MySQL)?;
let connection = plugin.create_connection(config).await?;