5 个版本

0.2.3 2024年3月26日
0.2.2 2024年2月28日
0.2.1 2024年2月6日
0.2.0 2024年1月30日
0.1.0 2024年1月30日

#987数据库接口

MIT/Apache

18KB
297

PostgreSQL 命名参数

此库允许在 PostgreSQL 查询中使用命名参数。此库特别旨在支持 rust-postgres。提供了一个宏,可以将带有命名参数的查询重写为查询及其位置参数。

依赖项

该宏展开为对 postgres-types 的使用,因此请确保将其包含在依赖项中

[dependencies]
postgres-types = ...
pg_named_args = ...

查询参数语法

该宏使用结构体语法来表示命名参数。结构体名称 Args 是必需的,以支持 rustfmt 和 rust-analyzer。如下面的示例所示,命名参数也允许简写字段初始化。

let location = "netherlands";
let period = Period {
    start: 2020,
    end: 2030,
};

let (query, args) = query_args!(
    r"
    SELECT location, time, report
    FROM weather_reports
    WHERE location = $location
        AND time BETWEEN $start AND $end
    ORDER BY location, time DESC
    ",
    Args {
        location,
        start: period.start,
        end: period.end,
    }
);
let rows = client.query(query, args).await?;

插入语法

对于 INSERT,支持特殊的语法,这有助于避免列名列表与值之间的不匹配

let location = "sweden";
let time = "monday";
let report = "sunny";

let (query, args) = query_args!(
    r"
    INSERT INTO weather_reports
        ( $[location, time, report] )
    VALUES
        ( $[..] )
    ",
    Args {
        location,
        time,
        report
    }
);
client.execute(query, args).await?;

IDE 支持

首先,此宏使用的语法与 rustfmt 兼容。像平常一样运行 rustfmt,它将格式化宏。

其次,该宏以 rust-analyzer "友好" 的方式实现。这意味着 rust-analyzer 知道哪些参数是必需的,并且可以完成它们。使用代码操作 "填充结构体字段" 或让 rust-analyzer 完成字段名称。

目标

  • 提高从 Rust 执行 PostgreSQL 查询的可用性。

  • 降低查询参数不匹配的风险。

  • 支持 rustfmt 以帮助格式化。

  • 支持 rust-analyzer 完成和一些代码操作。

贡献

我们欢迎社区对此项目的贡献。

在做出任何贡献之前,请阅读我们的 贡献条款

任何有意提交以包含在内的贡献,应遵守 Rust 标准许可模型(MIT 或 Apache 2.0),因此将双重许可,如下所述,不附带任何额外条款或条件

许可

此贡献在以下任一许可下双重许可

由您选择。

依赖项

~265–720KB
~17K SLoC