gpt4 book ai didi

postgresql - 如何在 rust-postgres client.execute 调用中使用用户定义的类型

转载 作者:行者123 更新时间:2023-12-05 04:46:49 25 4
gpt4 key购买 nike

我有以下代码用于在表格中插入电子邮件地址。

fn add(&mut self, email: &str) {
match self.client.execute("call email_add($1)", &[&email]) {
Ok(_) => {
println!("inserted")
}
Err(e) => {
println!("{:?}", e);
}
}
}

我在测试代码时遇到这个错误:

Error { kind: ToSql(0), cause: Some(WrongType { postgres: Other(Other { name: "email_address", oid: 37434, kind: Domain(Text), schema: "public" }), rust: "&str" }) }

电子邮件地址用户定义类型定义为:

-- http://www.regular-expressions.info/email.html
create domain email_address
text not null
constraint chk_email
check(
length(value) < 254
and
value ~ '^[a-zA-Z0-9._%+-]{1,64}@(?:[a-zA-Z0-9-]{1,63}\.){1,125}[a-zA-Z]{2,63}$'
);

我正在使用 rust-postgres crate。

最佳答案

我必须为我创建的 email_address 域实现 postgres types::To Sql 特性。

struct EmailAddress {
email: String
}

impl ToSql for EmailAddress {
fn to_sql(&self, ty: &Type, out: &mu BytesMut) -> Result<IsNull, Box<dyn Error + Sync + Send>> {
return self.email.to_sql(ty, out);
}

to_sql_checked!();

fn accepts(ty: &Type) -> bool {
return ty.name() == "email_address";
}
}

然后我将添加函数更改为:

fn add(&mut self, email: &str) {
let email_address: EmailAddress = EmailAddress {
email: String::from(email)
}
match self.client.execute("call email_add($1)", &[&email_address]) {
Ok(_) => {
println!("inserted")
}
Err(e) => {
println!("{:?}", e);
}
}
}

关于postgresql - 如何在 rust-postgres client.execute 调用中使用用户定义的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68712720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com