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日 |
#1013 in 数据库接口
1,859 每月下载次数
用于 2 个crate(通过 catalytic_query_parser)
105KB
2K SLoC
Catalytic:ScyllaDB和Cassandra对象关系映射器
此库包含多个crate,具有以下功能- 自动将表映射到Rust
struct
: catalytic_table_to_struct。请参阅使用方法。请查看生成目录中的生成代码。 - 编译时检查查询: catalytic_macro (
catalytic_macro::query
)。请参阅使用方法。 - 用于生成业务逻辑的插件派生宏: catalytic_macro (
catalytic_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)
- 添加build依赖项:
catalytic_table_to_struct = "0.1"
- 创建一个build.rs文件
- 可选实现
Tranformer
特性和使用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
可用于其他派生宏。
在生产中使用。
https://www.beezleapp.com/ - Beezle 社交应用允许用户连接附近的用户,发现当地活动。
依赖项
约11-21MB
约291K SLoC