簡體   English   中英

外部加入Esqueleto

[英]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 360​​0)它就會失敗。 模式分析中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM