6 个版本 (重大更新)
0.5.0 | 2023 年 10 月 30 日 |
---|---|
0.4.0 | 2023 年 10 月 27 日 |
0.3.1 | 2023 年 10 月 25 日 |
0.2.0 | 2023 年 10 月 24 日 |
0.1.0 | 2023 年 10 月 20 日 |
#1820 在 数据库接口 中
每月下载量 38 次
39KB
1K SLoC
QuackDB
一个具有易用高级 API 的 DuckDB API,同时不牺牲低级访问能力。
与 duckdb-rs 相比
- QuackDB 尽可能避免 API 上的生命周期
- 数据库对象是引用计数的
- 这避免了显式存储父对象的需求
- QuackDB 不会尝试模仿 Rusqlite API
- QuackDB 数据访问和处理以 Arrow 为中心
API 级别
主要 API 是高级、安全的 API。
quackdb-internal
包含对来自 libduckdb-sys
的类型的封装,这些类型仅用于对象生命周期管理。可以通过引用高级或封装结构来访问原始 FFI 处理。
API 支持
C API | 高级 |
---|---|
数据库 | 是 |
连接 | 是 |
配置 | 是 |
查询 | Arrow |
数据块 | 否 |
值 | 否 |
类型 | 部分 |
语句 | 是 |
追加器 | 是 |
表函数 | 几乎 |
替换扫描 | 是 |
- 查询结果需要直接与 arrow
RecordBatch
一起工作 - 支持表函数,但必须通过 FFI 直接与数据块一起工作
- 目前,DuckDB 类型、Arrow 类型和 Rust 类型尚未完全协调一致
API 习惯用法
- 高级 API 将低级处理类型作为
pub handle
字段公开 - 高级 API 遵循 Rust 命名
- 低级 API 封装原始处理并执行所有基本操作
- 低级 API 引用原始处理
- 低级 API 使用 Rust 类型
- 低级 API 遵循 DuckDB 命名
路线图
- 支持 Arrow 流
- 清理接收器
- 清理表函数
- 移除不需要
Drop
实现的中间处理 - 支持 Serde
- 支持数据块
- 全面文档
- 全面测试
依赖项
~16–25MB
~291K SLoC