外部結合が esqueleto でどのように機能するかについて少し混乱しています。
次のクエリを作成しました(簡略化):
select $ from $ \(rep `LeftOuterJoin` event) -> do
on (rep ^. RepAtomId ==. event ^. EventAtomId )
where_ (rep ^. RepAtomId ==. val aid)
return $ (rep, event ^. EventSeconds)
私の知る限り、SQL 側では、このクエリは関連するイベントを持つ可能性のある担当者を検索します。イベントが関連付けられていない場合、イベント フィールド (EventSeconds など) は「null」になります。Haskell 側では、これらを Maybe Seconds に変換する必要があります (まあ、int ですが、おわかりでしょう)。
では、このクエリを実行すると、rep リレーションに隣接するものが何もない場合、実際にはどうなるでしょうか? デフォルトを貼り付けるためにタプルを分解するにはどうすればよいですか?
現在、次のようなものがあります。
case listToMaybe lrep of
Just ( entityVal -> rep
, unValue -> seconds
) -> do stuff
(ここで ViewPatterns をオンにしていることに注意してください)。このタイプはチェックします。しかし、 (?.) と (fromMaybe 3600) を使用すると失敗します。パターン分析で unValue。