| Safe Haskell | Safe-Inferred |
|---|---|
| Language | GHC2021 |
Database.Persist.Sql.Lifted.Expression.Case
Documentation
case_ :: PersistField a => [(SqlExpr (Value Bool), SqlExpr (Value a))] -> SqlExpr (Value a) -> SqlExpr (Value a) #
CASE statement. For example:
select $ return $case_[when_(exists$from$ \p -> dowhere_(p^.PersonName==.val"Mike"))then_(subSelect$from$ \v -> do let sub =from$ \c -> dowhere_(c^.PersonName==.val"Mike") return (c^.PersonFavNum)where_(just(v^.PersonFavNum) >.subSelectsub) return $count(v^.PersonName) +.val(1 :: Int)) ] (else_$val(-1))
This query is a bit complicated, but basically it checks if a person
named "Mike" exists, and if that person does, run the subquery to find
out how many people have a ranking (by Fav Num) higher than "Mike".
NOTE: There are a few things to be aware about this statement.
- This only implements the full CASE statement, it does not implement the "simple" CASE statement.
- At least one
when_andthen_is mandatory otherwise it will emit an error. - The
else_is also mandatory, unlike the SQL statement in which if theELSEis omitted it will return aNULL. You can reproduce this vianothing.
Since: esqueleto-2.1.2