3个版本
0.1.2 | 2022年1月12日 |
---|---|
0.1.1 | 2021年11月13日 |
0.1.0 | 2021年11月11日 |
#2332 在 数据库接口
被 2 个crate使用(通过 scylla_orm_query_parser)
96KB
2K SLoC
ScyllaDb/Cassandra 对象关系映射器
特性
此库包含具有以下特性的几个crate
- 自动将表映射到Rust
struct
:scylla_orm_table_to_struct。请参阅使用说明。请参阅生成的目录以获取生成的代码。 - 编译时检查查询:scylla_orm_macro (
scylla_orm_macro::query
)。请参阅使用说明。 - 用于生成业务逻辑的插件推导宏:scylla_orm_macro (
scylla_orm_macro::mirror
) - 自动JSON映射。当存在类型为
text
的列时,您可以实现Transformer
trait并将其映射到实现serde::Serialize
和serde::Deserialize
的类型。 - 所有查询都作为预编译语句执行
- 支持物化视图(如果列相同,则在基础表之间进行映射)
由于https://github.com/scylladb/scylla-rust-driver/issues/104,尚不支持所有类型
查询类型
根据查询,可以推导出某种查询类型。这些可以在此处找到。以下是常用查询类型
SelectMultiple
:可以作为迭代器迭代行SelectUnique
:通过完整主键选择可选的唯一行SelectUniqueExpect
:与SelectUnique
相同,但如果行不存在则失败SelectUniqueExpect
与Count
作为实体类型:具有特殊的select_count
方法,用于查询“select count(*) from ...”等
还有用于CRUD操作的struct
。
使用方法
自动将表映射到Rust
您可以在示例目录中查看如何生成Rust struct
的示例。
- 在build.rs文件中实现了
Transformer
特质,并用于JSON映射。 - 在生成的目录中,您可以查看生成的
struct
。
如何自己实现它(模仿example
crate的逐步指南)
- 添加构建依赖:
scylla_orm_table_to_struct = "0.1"
- 创建一个build.rs文件
- 可选实现
Tranformer
特质(或使用DefaultTransformer
) - 调用
scylla_orm_table_to_struct::generate
- 构建项目
表'child'生成的代码结构的示例:
- Child:一个包含自有值的
struct
。可以转换为ChildRef、PrimaryKey和PrimaryKeyRef。 - ChildRef:一个值都是借用类型的
struct
。这个struct
可以执行插入操作。可以转换为Child、PrimaryKey和PrimaryKeyRef。 - PrimaryKey:一个包含Child主键字段自有值的
struct
。可以转换为PrimaryKeyRef。 - PrimaryKeyRef:一个值都是借用类型的
struct
。这个struct
可以执行更新、删除和选择操作。可以转换为PrimaryKey。 - UpdatableColumn:一个包含可以更新列的自有值枚举变体的
enum
。可以转换为UpdatableColumnRef。 - UpdatableColumnRef:一个值都是借用类型的
enum
。这个用于PrimaryKeyRef的更新操作。可以转换为UpdatableColumn。
宏
Crate scylla_orm_macro
包含几个宏,可以用于确保编译/类型检查查询。如何使用这些宏的示例可以在lib.rs中的方法qmd
中找到。
如何自己实现它
- 添加依赖:
scylla_orm_macro = "0.1"
query
宏返回给定查询的正确查询类型。query_base_table
宏将一个select
查询转换为物化视图表,转换为基表的select
查询。mirror
和primary_key
可用于其他派生宏。
依赖项
~17–26MB
~260K SLoC