sqel-0.0.1.0: lib/Sqel/Data/FragType.hs
module Sqel.Data.FragType where
import Sqel.Data.Order (Order)
import Sqel.Data.Sql (Sql, sql)
data FragType =
Where
|
Offset
|
Limit
|
Order Order
|
Custom Int Text
deriving stock (Eq, Show, Generic)
renderWithFragKeyword :: Sql -> FragType -> Sql
renderWithFragKeyword param = \case
Where -> [sql|where #{param}|]
Offset -> [sql|offset #{param}|]
Limit -> [sql|limit #{param}|]
Order dir -> [sql|order by #{param} ##{dir}|]
Custom _ kw -> [sql|##{kw} #{param}|]
sfragOrdinal :: FragType -> Int
sfragOrdinal = \case
Where -> 0
Order _ -> 1
Limit -> 2
Offset -> 3
Custom i _ -> i
instance Ord FragType where
compare =
comparing sfragOrdinal