Rust SQLX板条箱:如何重用执行器?

问题描述

我正在尝试使用sqlX作为后端存储在Rust中开发一个应用服务器。这是针对具有某些特殊认行为的原始CMS,例如:如果未找到页面,则自动生成带有空白内容页面。我希望能够重用调用sql函数,所以我希望它们采用实现sqlx Executor特征的对象,这意味着它可以采用实现该特征的任何东西,包括Connection,ConnectionPool和Transaction。执行者还只处理对对象的引用,而不是对象本身。

所有内容都很容易理解。精细。每个带有单个调用数据库函数都很好用!

但是,看来我无法重用执行器。确定页面不存在后,将调用函数;我创建一个事务,并在执行器位置使用引用&mut transaction进行调用


async fn create_page_for_title(e: impl Executor<'_,Database = sqlite>,title: &str) -> sqlResult<RawPage> 
{
    let newcontent_id = insert_new_root_content(e).await?;
    let newpage = insert_new_page(e,title,newcontent_id).await?;
    Ok(newpage)
}

这就是Rust(1.46)所说的:

Error[E0382]: use of moved value: `e`
   --> src/store.rs:239:30
    |
230 | async fn create_page_for_title(e: impl Executor<'_,title: &str) -> sqlResult<RawPage>
    |                                - move occurs because `e` has type `impl Executor<'_,Database = sqlite>`,which does not implement the `copy` trait
...
238 |     let newcontent_id = insert_new_root_content(e).await?;
    |                                                 - value moved here
239 |     let newpage = insert_new_page(e,newcontent_id).await?;
    |                                   ^ value used here after move

最糟糕的是,知道e是引用,引用是copy。但是我似乎无法使Rust相信这一点,而且我不确定为什么。这是我在同一范围内两次使用impl Executor的唯一功能,但是随着时间的推移,我相信我会发现更多的功能。请帮忙吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)