这个项目能做什么

better-duck 是一个围绕嵌入式使用场景设计的 DuckDB Rust 客户端,数据库运行在应用程序内部,而不是作为独立服务器。DuckDB C 库会被编译进来,因此不需要系统软件包或运行时依赖——适合桌面应用、移动端交叉编译以及类似环境。 该项目拆分为多个 crate:better-duck-core(连接、预编译语句、批量 Appender、类型覆盖、用户定义函数)、better-duck-diesel(Diesel 2.3 后端,包含查询 DSL、迁移、r2d2 连接池,以及 DuckDB 特有的 SQL 函数、聚合和运算符)、better-duck-macros(用于 UDF 和数据派生宏的过程宏,通过 feature flag 引入),以及 better-duck-sys(内置的 DuckDB C API 绑定)。 核心能力包括:面向行、不依赖 Arrow 的行和值访问;封装后的 FFI,使用户代码中不会泄漏 unsafe 代码;覆盖 DuckDB 类型,例如各种宽度的整数、DECIMAL、UUID、BIT、BIGNUM、时间类型,以及复合类型 LIST/ARRAY/STRUCT/MAP/UNION/ENUM;参数化查询;批量 Appender;通过 r2d2 连接池共享 Database 句柄,并提供 Tokio 异步门面;以及扩展管理辅助工具。 属性宏可将普通 Rust 函数注册为标量函数、表函数、聚合函数或转换函数,并根据签名推断类型。派生宏可将结构体和枚举映射到行和 DuckDB 类型(FromRow、ToRow、DuckEnum、DuckStruct),辅助宏则覆盖事务和参数。Diesel 后端增加了标准 CRUD、事务、DuckDB 特有的 SQL 类型、由 DuckDB 函数和运算符组成的 DSL、空间辅助工具,以及连接池管理器。 Feature flag 控制内置打包、chrono 和 decimal 转换、JSON 和 Parquet 扩展、异步、连接池、UDF、派生宏,以及构建时 bindgen。README 将项目标记为 beta,并指出在 1.0 之前可能发生破坏性变更。