esqueleto-3.5.13.2: test/Common/Test/CTE.hs
{-# language TypeApplications #-}
module Common.Test.CTE where
import Common.Test.Models
import Common.Test.Import
import Database.Persist.TH
testCTE :: SpecDb
testCTE = describe "CTE" $ do
itDb "can refer to the same CTE twice" $ do
let q :: SqlQuery (SqlExpr (Value Int), SqlExpr (Value Int))
q = do
bCte <- with $ do
b <- from $ table @B
pure b
a :& b1 :& b2 <- from $
table @A
`innerJoin` bCte
`on` do
\(a :& b) ->
a ^. AK ==. b ^. BK
`innerJoin` bCte
`on` do
\(a :& _ :& b2) ->
a ^. AK ==. b2 ^. BK
pure (a ^. AK, a ^. AV +. b1 ^. BV +. b2 ^. BV)
insert_ $ A { aK = 1, aV = 2 }
insert_ $ B { bK = 1, bV = 3 }
ret <- select q
asserting $ do
ret `shouldMatchList`
[ (Value 1, Value (2 + 3 + 3))
]