#scylla #cassandra #cql #table-column #query-parser

scylla_orm_query_parser

Scylla ORM的查询解析器,完全兼容Apache Cassandra™

1 个不稳定版本

0.1.0 2021年11月11日

#14#table-column


scylla_orm_macro 使用

MIT 协议

140KB
3K 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特性和将其映射到实现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。此结构可以进行插入操作。可以转换为 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 查询。
  • mirrorprimary_key 可用于其他 derive 宏。

依赖项

~19–32MB
~327K SLoC