#edge-db #error #database-client #definition

bin+lib edgedb-errors

EdgeDB 数据库客户端的错误类型

8 个版本 (4 个重大更新)

0.4.2 2024年5月9日
0.4.1 2023年6月22日
0.4.0 2023年5月15日
0.3.0 2022年7月26日
0.0.0 2020年10月27日

#1171数据库接口

Download history 89/week @ 2024-04-25 118/week @ 2024-05-02 210/week @ 2024-05-09 92/week @ 2024-05-16 124/week @ 2024-05-23 114/week @ 2024-05-30 172/week @ 2024-06-06 264/week @ 2024-06-13 119/week @ 2024-06-20 147/week @ 2024-06-27 156/week @ 2024-07-04 111/week @ 2024-07-11 156/week @ 2024-07-18 112/week @ 2024-07-25 80/week @ 2024-08-01 94/week @ 2024-08-08

每月下载量478
用于 8 个 Crates(5 个直接使用)

MIT/Apache

32KB
688

EdgeDB Rust 绑定:错误包

此包包含从数据库返回的错误定义。

许可证

许可协议为以下之一:

由您选择。


lib.rs:

EdgeDB 错误处理

EdgeDB Rust 绑定产生的所有错误都封装在 Error 结构中。该结构类似于 Box<dyn Error>anyhow::Error,但它只能包含 EdgeDB 错误类型。或者可以使用 UserError 来封装自定义错误(通常用于从事务返回错误)。

可以在网站文档中找到 EdgeDB 错误类型的完整列表。

每个错误类型都表示为单独的类型,实现了 ErrorKind 特性。但错误类型被用作标记结构;可以使用 Error::is 来检查错误类型,并使用它们创建错误实例

let err = UserError::with_source(io::Error::from(io::ErrorKind::NotFound));
assert!(err.is::<UserError>());

由于错误是分层的,因此 Error::is 与任何祖先一起使用

assert!(err.is::<MissingArgumentError>());
assert!(err.is::<QueryArgumentError>());  // implied by the assertion above
assert!(err.is::<InterfaceError>());  // and this one
assert!(err.is::<ClientError>());  // and this one

错误层次结构没有多重继承(即每个错误只有一个父级)。当我们在不同的父级之间进行匹配时,我们使用错误标记


assert!(err1.is::<ClientConnectionTimeoutError>());
assert!(err2.is::<TransactionConflictError>());
// Both of these are retried
assert!(err1.has_tag(SHOULD_RETRY));
assert!(err2.has_tag(SHOULD_RETRY));

// But they aren't a part of common hierarchy
assert!(err1.is::<ClientError>());
assert!(!err1.is::<ExecutionError>());
assert!(err2.is::<ExecutionError>());
assert!(!err2.is::<ClientError>());

事务中的错误

在事务中必须对错误给予特别注意。一般来说

  1. 查询错误不应被忽略,应将其传播到事务函数。
  2. 用户错误可以通过以下方法封装到UserError中:
  1. 原始查询错误必须通过错误链传播。它可以在.source()链中,但不能被吞没,否则重试事务可能会运行不正确。

错误报告良好

请参阅edgedb-tokio的文档。

依赖关系

~135–415KB