1

タイムスタンプと時間間隔の演算と比較を行うフィルター式を使用して、ディーゼル クエリを作成しようとしています。次の式は、そのままのディーゼルを使用して書くことはできないと思います。残念ながら、私はsql(...)関数を使用する大ハンマー アプローチに頼っています。

let query = videos::table
    .inner_join(events::table)
    .filter(sql(r#""events"."start_date" <= NOW() + interval '60 seconds'"#))
    .filter(sql(r#""events"."start_date" + ("videos"."duration" * interval '1 second') > NOW()"#))

私の(省略された)スキーマ:

table! {
    events (id) {
        id -> Int4,
        video_id -> Int4,
        start_date -> Timestamp,
    }
}

table! {
    videos (id) {
        id -> Int4,
        duration -> Float4,
    }
}

私の質問:

  1. 私が間違っている?カスタムタイプのないディーゼルでこれを書くことはできますか?
  2. これがバニラ ディーゼルで記述できない場合、これをよりタイプ セーフでディーゼルに適した表現に分割するにはどうすればよいでしょうか? どの部分がカスタムで、どの特性を実装する必要がありますか?
4

1 に答える 1