Я разрабатываю новую конечную точку с использованием Rocket и пытаюсь вернуть Ve c <>, сделанный из различных структур.
Необработанный запрос, который я хочу повторить в дизеле:
select location.id, location.name, w.datetime, t.temp, w.compass, w.speed, r.probability, s.height
from location
inner join rainfall r on location.id = r.location
inner join temperature t on location.id = t.location
inner join wind w on location.id = w.location
inner join swell s on location.id = s.location
where t.datetime = w.datetime
and s.datetime = t.datetime
and CAST(t.datetime as date) = CAST(r.datetime as date)
and t.datetime > now() and t.datetime < NOW() + INTERVAL 1 HOUR;
и я признаю, что для использования функции CAST мне необходимо использовать макрос sql_function! :
sql_function! {
#[sql_name="CAST"]
fn cast(x: sql_types::Nullable<sql_types::Datetime>) -> sql_types::Date;
}
, который позволяет мне создать следующий запрос:
let summaries: Vec<(Location, Swell, Wind, Temperature, Rainfall)> = location::table
.inner_join(swell::table)
.inner_join(wind::table)
.inner_join(temperature::table)
.inner_join(rainfall::table)
.filter(temperature::datetime.eq(wind::datetime))
.filter(temperature::datetime.eq(swell::datetime))
.filter(temperature::datetime.gt(utilities::today()))
.filter(temperature::datetime.lt(utilities::future_hour(1)))
.filter(cast(temperature::datetime).eq(cast(rainfall::datetime)))
.load(&conn.0)?;
Однако, когда я запускаю этот запрос, я получаю SQL Ошибка запроса:
"У вас есть ошибка в вашем синтаксисе SQL, проверьте руководство, которое соответствует вашей MySQL версии сервера для правильного синтаксиса, который будет использоваться рядом с \ ') = CAST (' rainfall '.' datetime ') \' в строке 1 "
Как показано в необработанном SQL Заявление должно выглядеть следующим образом: CAST('rainfall'.'datetime' as date)
.
Мой вопрос: как я могу добавить компонент «как дату» в мой запрос дизеля? Чего-то не хватает в определении sql_function?
Спасибо за вашу помощь.