[英]Outer Joins with Esqueleto
關於外連接如何與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(嗯,整數,但你明白了)。
那么當我運行這個查詢時實際發生了什么,並且沒有什么可以與我的代表關系相鄰? 如何解構元組以固定默認值?
目前,我有以下幾點:
case listToMaybe lrep of
Just ( entityVal -> rep
, unValue -> seconds
) -> do stuff
(注意我在這里打開了ViewPatterns)。 這種類型檢查。 但如果我使用(?。)和(fromMaybe 3600)它就會失敗。 模式分析中的unValue。
我能夠通過在正確的位置添加“正確”來解決這個問題:
select $ from $ \(rep `LeftOuterJoin` event) -> do
on (just (rep ^. RepAtomId) ==. event ?. EventAtomId )
where_ (rep ^. RepAtomId ==. val aid)
return $ (rep, event ?. EventSeconds)
case listToMaybe lrep of
Just ( entityVal -> rep
, (fromMaybe 3600) . unValue -> seconds
) -> do stuff
這個想法是(事件)確實有一個類似於Maybe的類型(我不確定它的類型是什么,但我知道它有一個嵌入的Maybe)。 因此,當我與代表進行比較時,我將a(也許a)與a進行比較。 'just'將a包裝成(也許是a),而不必解構中間類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.