{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Orville.PostgreSQL.Expr.Select
( SelectClause
, selectClause
, SelectExpr
, selectExpr
, Distinct (Distinct)
)
where
import qualified Orville.PostgreSQL.Raw.RawSql as RawSql
newtype SelectClause
= SelectClause RawSql.RawSql
deriving (RawSql -> SelectClause
SelectClause -> RawSql
(SelectClause -> RawSql)
-> (RawSql -> SelectClause) -> SqlExpression SelectClause
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: SelectClause -> RawSql
toRawSql :: SelectClause -> RawSql
$cunsafeFromRawSql :: RawSql -> SelectClause
unsafeFromRawSql :: RawSql -> SelectClause
RawSql.SqlExpression)
selectClause :: SelectExpr -> SelectClause
selectClause :: SelectExpr -> SelectClause
selectClause SelectExpr
expr = RawSql -> SelectClause
SelectClause (String -> RawSql
RawSql.fromString String
"SELECT " RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> SelectExpr -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql SelectExpr
expr)
newtype SelectExpr = SelectExpr RawSql.RawSql
deriving (RawSql -> SelectExpr
SelectExpr -> RawSql
(SelectExpr -> RawSql)
-> (RawSql -> SelectExpr) -> SqlExpression SelectExpr
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: SelectExpr -> RawSql
toRawSql :: SelectExpr -> RawSql
$cunsafeFromRawSql :: RawSql -> SelectExpr
unsafeFromRawSql :: RawSql -> SelectExpr
RawSql.SqlExpression)
data Distinct = Distinct
selectExpr :: Maybe Distinct -> SelectExpr
selectExpr :: Maybe Distinct -> SelectExpr
selectExpr Maybe Distinct
mbDistinct =
RawSql -> SelectExpr
SelectExpr (RawSql -> SelectExpr)
-> (String -> RawSql) -> String -> SelectExpr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> RawSql
RawSql.fromString (String -> SelectExpr) -> String -> SelectExpr
forall a b. (a -> b) -> a -> b
$
case Maybe Distinct
mbDistinct of
Just Distinct
Distinct -> String
"DISTINCT "
Maybe Distinct
Nothing -> String
""