rust - 将柴油过滤器应用于单个表或加入?
问题描述
我在运行时生成柴油过滤器(使用与此问题类似的方法)。我有一个make_filters
为表生成过滤器的函数tunnel
:
fn make_filters() -> Vec<Box<dyn BoxableExpression<tunnel::table, Pg, SqlType = Bool>>>
我希望将这些过滤器应用于表tunnel
或tunnel
and的连接connection
。像这样:
let mut query = tunnel::table.left_join(connection::table).into_boxed();
for filter in filters.as_sql_where() {
query = query.filter(filter);
}
但是当我尝试时,我得到了这个错误:
^^^ the trait
`diesel::AppearsOnTable<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<tunnel::table, connection::table, diesel::query_source::joins::LeftOuter>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<connection::columns::tunnel_id>, diesel::expression::nullable::Nullable<tunnel::columns::id>>>>`
is not implemented for `dyn diesel::BoxableExpression<tunnel::table, diesel::pg::Pg, SqlType = diesel::sql_types::Bool>`
如果查询只是 ,这很好用tunnel::table.into_boxed()
,所以我认为我需要概括make_filters
.
这里的最小例子。
解决方案
由于过滤器可以同时应用于连接表和tunnel
表,因此这里的首选解决方案是在连接表之前应用过滤器。所以这样的事情应该可以正常工作:
let mut query = tunnel::table.into_boxed();
for filter in filters.as_sql_where() {
query = query.filter(filter);
}
let query = query.left_join(connection::table);
推荐阅读
- time-complexity - O(nm/8 * log(nm/8)) + O(nm/9 * log(nm/9)) + ... + O(nm/m * log(nm/m)) 等于多少?
- linq - 当 Guid 不起作用时,如何在 LINQ to SQL 中获取随机记录
- visual-studio-code - 安装完成后visual studio出现黑屏
- android - 如何检查android webview中的所有元素
- r - 我如何在文件夹中列出所有带有 .nc (netcdf) 的文件并从 10 个变量中提取 1 个变量?
- python - Python:无法从字符串转换为浮点数
- postgresql - Postgres 中的奇怪异常处理
- minecraft - 给定选择中所有块的坐标 - Minecraft
- python-3.x - 具有多个影响类别的 MultiMonteCarlo
- python - scrapy:如何同时进行
- 和
- 逐个?