#sql-query #postgresql #sql #query #sql-database #generator #tokio-postgres

bin+lib cornucopia

从您的 PostgreSQL 查询中生成类型检查的 Rust

25 个版本 (8 个破坏性版本)

0.9.0 2022 年 11 月 7 日
0.7.4 2022 年 5 月 6 日

#2653数据库接口

Download history 301/week @ 2024-03-13 322/week @ 2024-03-20 274/week @ 2024-03-27 478/week @ 2024-04-03 447/week @ 2024-04-10 357/week @ 2024-04-17 819/week @ 2024-04-24 500/week @ 2024-05-01 367/week @ 2024-05-08 341/week @ 2024-05-15 500/week @ 2024-05-22 347/week @ 2024-05-29 289/week @ 2024-06-05 353/week @ 2024-06-12 331/week @ 2024-06-19 548/week @ 2024-06-26

每月 1,560 次下载

MIT/Apache

115KB
3K SLoC

康诺科皮亚

从您的 SQL 生成类型检查的 Rust


康诺科皮亚是一个由 rust-postgres 驱动的工具,旨在从您的 PostgreSQL 查询中生成类型检查的 Rust 接口。它通过针对实际数据库准备您的查询,然后对它们运行广泛的验证套件来实现。一旦查询被准备和验证,就会生成 Rust 代码到一个模块中,该模块可以导入并在您的项目中使用。

基本原理是

  1. 编写您的 PostgreSQL 查询。
  2. 使用康诺科皮亚生成 Rust 代码。
  3. 在您的项目中使用生成的代码。

与其他 Rust 数据库接口相比,康诺科皮亚的方法在易于理解的同时,还生成了既方便使用又没有复杂宏或通用型的代码。由于康诺科皮亚生成的是纯 Rust 结构体,因此您还可以轻松地构建生成的项。

以下是其一些定义性功能

  • 以 SQL 为先。您的 SQL 是唯一的事实来源。没有复杂的 ORM。
  • 强大的查询验证。在运行时之前捕获错误,具有强大(且美观)的诊断。
  • 支持自定义用户类型(复合类型、域和枚举)和一维数组。
  • 同步和异步驱动程序支持,可选的连接池。
  • 高效的非分配行映射。
  • 精细的类型空值控制。
  • 作为库和 CLI 提供使用。
  • 尽可能接近原生 rust-postgres 性能。

您可以通过阅读我们的 书籍 了解更多关于使用康诺科皮亚的信息,或者您可以通过查看我们的 示例 获取快速入门。

康诺科皮亚的快速尝鲜

本书籍是获取更深入解释的地方,但这里有一个非常简单的示例,以便您有一个大概的了解。

假设您有以下PostgreSQL查询

-- queries/some_query_file.sql

--! authors
SELECT first_name, last_name, country FROM Authors;

--! insert_author
INSERT INTO Authors(first_name, last_name, country) 
VALUES (:first_name, :last_name, :country)

注意查询注释(--! authors--! insert_authors)和命名绑定参数(:first_name等)。

然后,使用Cornucopia的CLI生成Rust代码后,您可以将它导入到项目中,如下所示

mod cornucopia;
use cornucopia::{authors, insert_author};

下面是这些查询的一个示例用法

insert_author.bind(&client, "Agatha", "Christie", "England");

let all_authors = authors().bind(&client).all();

for author in all_authors {
  println!("[{}] {}, {}", 
    author.country, 
    author.last_name.to_uppercase(), 
    author.first_name
  )
}

您可以使用Cornucopia轻松自定义查询的几乎所有方面(自定义参数和行结构体,重命名,空值控制等),所以如果您想了解更多,请访问本书

MSRV

此crate使用Rust 2021版,至少需要版本1.62.1。

许可证

根据以下任一项获得许可

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,包括在本作品中包含的,都应作为上述双重许可,不附加任何额外条款或条件。

依赖项

~12–23MB
~345K SLoC