#scylla #cassandra #cql #table-column

scylla_orm_table_to_struct

Scylla ORM的表映射器,完全兼容Apache Cassandra™

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

MIT 协议

96KB
2K SLoC

ScyllaDb/Cassandra 对象关系映射器

Latest Version Build Status

特性

此库包含具有以下特性的几个crate

  • 自动将表映射到Rust structscylla_orm_table_to_struct。请参阅使用说明。请参阅生成的目录以获取生成的代码。
  • 编译时检查查询:scylla_orm_macro (scylla_orm_macro::query)。请参阅使用说明
  • 用于生成业务逻辑的插件推导宏:scylla_orm_macro (scylla_orm_macro::mirror)
  • 自动JSON映射。当存在类型为text的列时,您可以实现Transformer trait并将其映射到实现serde::Serializeserde::Deserialize的类型。
  • 所有查询都作为预编译语句执行
  • 支持物化视图(如果列相同,则在基础表之间进行映射)

由于https://github.com/scylladb/scylla-rust-driver/issues/104,尚不支持所有类型

查询类型

根据查询,可以推导出某种查询类型。这些可以在此处找到。以下是常用查询类型

  • SelectMultiple:可以作为迭代器迭代行
  • SelectUnique:通过完整主键选择可选的唯一行
  • SelectUniqueExpect:与SelectUnique相同,但如果行不存在则失败
  • SelectUniqueExpectCount作为实体类型:具有特殊的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查询。
  • mirrorprimary_key可用于其他派生宏。

依赖项

~17–26MB
~260K SLoC