Я не прав? Может ли это быть написано на дизеле без пользовательских типов?
Да, это может быть написано с помощью методов, предоставляемых дизелем, и с некоторыми незначительными изменениями схемы. См. Соответствующую документацию
. Дизель требует, чтобы вы могли только добавлять / вычитать интервалы из временных отметок. Это подразумевает, что вам нужна ваша схема, чтобы сделать это возможным:
table! {
videos (id) {
id -> Int4,
duration -> Interval,
}
}
Ваш запрос тогда будет выглядеть так:
let query = videos::table
.inner_join(events::table)
.filter(events::start_date.le(now + 60.seconds()))
.filter(now.lt(events::start_date + videos::duration))
Если это невозможно записать в Ванильный дизель, как я могу разбить это на более безопасное для типов, дизельное дружественное выражение? Какие части являются заказными, и какие черты мне нужно реализовать?
Теоретически должна быть возможность реализовать это вне дизеля. Код, скорее всего, будет тем же, который используется для реализации самого дизеля. Вероятно, вам нужно будет использовать локальные типы и более конкретные значения. Поэтому, если вы не можете изменить тип videos::duration
, возможно, имеет смысл go по этому маршруту.