1 个不稳定版本
0.1.0 | 2021年11月11日 |
---|
#14 在 #table-column
被 scylla_orm_macro 使用
140KB
3K 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
特性和将其映射到实现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
。此结构可以进行插入操作。可以转换为 Child、PrimaryKey 和 PrimaryKeyRef。 - PrimaryKey:一个包含 Child 的主键字段自拥有值的
struct
。可以转换为 PrimaryKeyRef。 - PrimaryKeyRef:一个值全部为借用值的
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
可用于其他 derive 宏。
依赖项
~19–32MB
~327K SLoC