selda-0.1.0.0: src/Database/Selda/SQL.hs
{-# LANGUAGE GADTs, OverloadedStrings #-}
-- | SQL AST and pretty-printing.
module Database.Selda.SQL where
import Database.Selda.Column
import Database.Selda.SqlType
import Database.Selda.Types (TableName)
import Data.Monoid
-- | A source for an SQL query.
data SqlSource
= TableName !TableName
| Product ![SQL]
| LeftJoin !(Exp Bool) !SQL !SQL
-- | AST for SQL queries.
data SQL = SQL
{ cols :: ![SomeCol]
, source :: !SqlSource
, restricts :: ![Exp Bool]
, groups :: ![SomeCol]
, ordering :: ![(Order, SomeCol)]
, limits :: !(Maybe (Int, Int))
}
-- | The order in which to sort result rows.
data Order = Asc | Desc
deriving (Show, Ord, Eq)
-- | A parameter to a prepared SQL statement.
data Param where
Param :: !(Lit a) -> Param
instance Show Param where
show (Param l) = "Param " <> show l
instance Eq Param where
Param a == Param b = compLit a b == EQ
instance Ord Param where
compare (Param a) (Param b) = compLit a b