sqel-0.0.1.0: lib/Sqel/Data/SelectExpr.hs
module Sqel.Data.SelectExpr where
import qualified Exon
import Sqel.Data.Dd (QOp)
import Sqel.Data.FragType (FragType, renderWithFragKeyword)
import Sqel.Data.Selector (Selector)
import Sqel.Data.Sql (Sql, ToSql (toSql))
data SelectAtom =
SelectAtom {
type_ :: FragType,
code :: Selector -> Int -> Sql
}
deriving stock (Generic)
data SelectFragment =
SelectFragment {
type_ :: FragType,
content :: Sql
}
deriving stock (Show, Eq, Generic, Ord)
renderSelectFragment :: SelectFragment -> Sql
renderSelectFragment SelectFragment {..} =
renderWithFragKeyword content type_
instance ToSql [SelectFragment] where
toSql = Exon.intercalate " " . fmap renderSelectFragment . sort
data SelectExpr =
SelectExprAtom FragType (Int -> Sql)
|
SelectExprList QOp [SelectExpr]
|
SelectExprSum [SelectExpr]
|
SelectExprNot SelectExpr
|
SelectExprIgnore