23 个版本
0.1.24 | 2023年12月29日 |
---|---|
0.1.20 | 2023年10月26日 |
0.1.14 | 2023年7月9日 |
0.1.12 | 2023年1月31日 |
0.1.0 | 2022年1月20日 |
#435 在 数据库接口
1,358 每月下载量
在 3 crates 中使用
39KB
888 行
催化剂:ScyllaDB 和 Cassandra 对象关系映射器
此库包含以下功能的几个 crates- 自动将表映射到 Rust
struct
:catalytic_table_to_struct。请参阅 用法。生成的代码在 生成 目录中。 - 编译时检查查询:catalytic_macro (
catalytic_macro::query
)。请参阅 用法。 - 生成业务逻辑的插件 derive 宏:catalytic_macro (
catalytic_macro::mirror
) - 自动 JSON 映射。当存在类型为
text
的列时,您可以实现Transformer
trait 并将其映射到实现serde::Serialize
和serde::Deserialize
的类型 - 所有查询都作为预处理语句执行
- 支持物化视图(如果列相同,则支持基表之间的映射)
由于 https://github.com/scylladb/scylla-rust-driver/issues/104,尚不支持所有类型
查询类型
根据查询,可以推导出某种查询类型。这些可以在 这里 找到。以下是常用的查询类型
SelectMultiple
:可以作为迭代器遍历行SelectUnique
:通过完整主键选择一个可选的唯一行SelectUniqueExpect
:与SelectUnique
相同,但行不存在时失败- 带有
Count
作为实体类型的SelectUniqueExpect:
还存在用于 CRUD 操作的 struct
。
用法
自动将映射表映射到 Rust
您可以在 example 目录中看到一个如何生成 Rust struct
的示例。
- 在 build.rs 文件中实现了
Transformer
trait 并用于 JSON 映射 - 在生成的目录中,您可以查看生成的
struct
如何自己实现它(模仿 example
包的步骤指南)
- 添加构建依赖项:
catalytic_table_to_struct = "0.1"
- 创建一个 build.rs 文件
- 可选地实现
Tranformer
trait(或使用DefaultTransformer
) - 调用
catalytic_table_to_struct::generate
- 构建项目
以下是表 'child' 生成的代码结构的示例
- Child:一个包含所有值的
struct
。可以转换为 ChildRef、PrimaryKey 和 PrimaryKeyRef - ChildRef:一个所有值都是借用值的
struct
。此结构可以执行插入操作。可以转换为 Child、PrimaryKey 和 PrimaryKeyRef - PrimaryKey:一个包含 Child 的主键字段所有值的
struct
。可以转换为 PrimaryKeyRef。 - PrimaryKeyRef:一个所有值都是借用值的
struct
。此结构可以执行更新、删除和选择操作。可以转换为 PrimaryKey - UpdatableColumn:一个包含可以更新的列的所有值的枚举变体的
enum
。可以转换为 UpdatableColumnRef。 - UpdatableColumnRef:一个所有值都是借用值的
enum
。这是 PrimaryKeyRef 用于更新的。可以转换为 UpdatableColumn。
宏
Crate catalytic_macro
包含几个宏,可用于确保编译/类型检查查询。如何在 lib.rs 中的方法 qmd
中使用这些宏的示例。
如何实现它
- 添加依赖项:
catalytic_macro = "0.1"
query
宏返回给定查询的正确 查询类型query_base_table
宏将select
查询转换为物化视图表,转换为基本表的select
查询mirror
和primary_key
可以用于其他 derive 宏
在生产中使用
https://www.beezleapp.com/ - Beezle 社交让用户连接附近的用户,发现当地活动
依赖关系
~11–20MB
~271K SLoC