1 个不稳定版本
0.1.0 | 2021年11月11日 |
---|
#2650 在 数据库接口
被 3 个Crate 使用
35KB
850 行
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
包的步骤指南)
- 添加构建依赖项:
scylla_orm_table_to_struct = "0.1"
- 创建一个 build.rs 文件
- 可选地实现
Transformer
接口(或使用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 宏
依赖项
~17–29MB
~276K SLoC