module Database.HaskellDB.Sql.PostgreSQL (generator) where
import Database.HaskellDB.Sql
import Database.HaskellDB.Sql.Default
import Database.HaskellDB.Sql.Generate
import Database.HaskellDB.FieldType
import Database.HaskellDB.PrimQuery
import System.Locale
import System.Time
generator :: SqlGenerator
generator = (mkSqlGenerator generator) { sqlSpecial = postgresqlSpecial
, sqlType = postgresqlType
, sqlLiteral = postgresqlLiteral
, sqlExpr = postgresqlExpr
}
postgresqlSpecial :: SpecialOp -> SqlSelect -> SqlSelect
postgresqlSpecial op q = defaultSqlSpecial generator op q
postgresqlLiteral :: Literal -> String
postgresqlLiteral (DateLit d) = defaultSqlQuote generator (formatCalendarTime defaultTimeLocale fmt d)
where fmt = iso8601DateFormat (Just "%H:%M:%S %Z")
postgresqlLiteral l = defaultSqlLiteral generator l
postgresqlType :: FieldType -> SqlType
postgresqlType BoolT = SqlType "boolean"
postgresqlType t = defaultSqlType generator t
postgresqlExpr :: PrimExpr -> SqlExpr
postgresqlExpr (BinExpr OpMod e1 e2) =
let e1S = defaultSqlExpr generator e1
e2S = defaultSqlExpr generator e2
in BinSqlExpr "%" e1S e2S
postgresqlExpr e = defaultSqlExpr generator e