#orm #scylla-db #cassandra #mapping #query #struct

催化剂

Scylla 的 ORM,完全兼容 Apache Cassandra™

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数据库接口

Download history 80/week @ 2024-04-22 194/week @ 2024-04-29 312/week @ 2024-05-06 392/week @ 2024-05-13 281/week @ 2024-05-20 324/week @ 2024-05-27 450/week @ 2024-06-03 824/week @ 2024-06-10 168/week @ 2024-06-17 374/week @ 2024-06-24 581/week @ 2024-07-01 210/week @ 2024-07-08 257/week @ 2024-07-15 159/week @ 2024-07-22 431/week @ 2024-07-29 511/week @ 2024-08-05

1,358 每月下载量
3 crates 中使用

MIT 许可证

39KB
888

催化剂:ScyllaDB 和 Cassandra 对象关系映射器

Latest Version Build Status

此库包含以下功能的几个 crates
  • 自动将表映射到 Rust structcatalytic_table_to_struct。请参阅 用法。生成的代码在 生成 目录中。
  • 编译时检查查询:catalytic_macro (catalytic_macro::query)。请参阅 用法
  • 生成业务逻辑的插件 derive 宏:catalytic_macro (catalytic_macro::mirror)
  • 自动 JSON 映射。当存在类型为 text 的列时,您可以实现 Transformer trait 并将其映射到实现 serde::Serializeserde::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 查询
  • mirrorprimary_key 可以用于其他 derive 宏

在生产中使用

https://www.beezleapp.com/ - Beezle 社交让用户连接附近的用户,发现当地活动

依赖关系

~11–20MB
~271K SLoC