#查询解析器 #scylla-db #orm # #结构体 #数据库表 #cassandra

catalytic_query_parser

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日

#1587数据库接口

Download history 32/week @ 2024-04-02 1/week @ 2024-06-04

391 每月下载量
catalytic_macro 中使用

MIT 许可证

150KB
3K SLoC

Catalytic: ScyllaDB 和 Cassandra 对象关系映射器

Latest Version Build Status

该库包含以下功能的几个crate
  • 自动将表映射到Rust 结构体catalytic_table_to_struct。请参阅用法。生成的代码可以在生成的目录中找到。
  • 编译时检查查询:catalytic_macro (catalytic_macro::query)。请参阅用法
  • 插件派生宏以生成业务逻辑: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相同,但若行不存在则失败
  • SelectUniqueExpectCount作为实体类型:对于如“select count(*) from ...”的查询具有特殊的select_count方法

还有用于CRUD操作的struct

用法

自动将表映射到Rust

您可以在示例目录中看到一个如何生成Rust struct的示例。

  • 在build.rs文件中实现了并使用了Transformer特质进行JSON映射
  • 在生成的目录中您可以查看生成的struct

如何自己实现它(模仿example crate的逐步指南)

  • 添加构建依赖项:catalytic_table_to_struct = "0.1"
  • 创建一个build.rs文件
  • 可选地实现Tranformer特质(或使用DefaultTransformer
  • 调用catalytic_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 catalytic_macro包含几个宏,可用于确保编译/类型检查查询。有关如何使用的示例,请参阅lib.rs中的方法qmd

如何实现它

  • 添加依赖项:catalytic_macro = "0.1"
  • query宏返回给定查询的正确查询类型
  • query_base_table宏将一个select查询转换为物化视图表,转换为基本表的select查询
  • mirrorprimary_key可用于其他派生宏

在生产中使用

https://www.beezleapp.com/ - Beezle Social允许用户连接附近的用户,发现当地活动

依赖项

~13–23MB
~319K SLoC