{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Orville.PostgreSQL.Expr.Time
( now
, makeInterval
, IntervalArgument
, years
, months
, weeks
, days
, hours
, minutes
, seconds
)
where
import Orville.PostgreSQL.Expr.Name (functionName)
import Orville.PostgreSQL.Expr.ValueExpression (ParameterName, ValueExpression, functionCall, functionCallNamedParams)
import qualified Orville.PostgreSQL.Raw.RawSql as RawSql
now :: ValueExpression
now :: ValueExpression
now = FunctionName -> [ValueExpression] -> ValueExpression
functionCall (String -> FunctionName
functionName String
"now") []
makeInterval :: [(IntervalArgument, ValueExpression)] -> ValueExpression
makeInterval :: [(IntervalArgument, ValueExpression)] -> ValueExpression
makeInterval [(IntervalArgument, ValueExpression)]
args =
FunctionName
-> [(ParameterName, ValueExpression)] -> ValueExpression
functionCallNamedParams
(String -> FunctionName
functionName String
"make_interval")
(((IntervalArgument, ValueExpression)
-> (ParameterName, ValueExpression))
-> [(IntervalArgument, ValueExpression)]
-> [(ParameterName, ValueExpression)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(IntervalArgument ParameterName
paramName, ValueExpression
value) -> (ParameterName
paramName, ValueExpression
value)) [(IntervalArgument, ValueExpression)]
args)
newtype IntervalArgument
= IntervalArgument ParameterName
deriving (RawSql -> IntervalArgument
IntervalArgument -> RawSql
(IntervalArgument -> RawSql)
-> (RawSql -> IntervalArgument) -> SqlExpression IntervalArgument
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: IntervalArgument -> RawSql
toRawSql :: IntervalArgument -> RawSql
$cunsafeFromRawSql :: RawSql -> IntervalArgument
unsafeFromRawSql :: RawSql -> IntervalArgument
RawSql.SqlExpression)
unsafeIntervalArg :: String -> IntervalArgument
unsafeIntervalArg :: String -> IntervalArgument
unsafeIntervalArg =
ParameterName -> IntervalArgument
IntervalArgument (ParameterName -> IntervalArgument)
-> (String -> ParameterName) -> String -> IntervalArgument
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ParameterName
forall a. SqlExpression a => String -> a
RawSql.unsafeSqlExpression
years :: IntervalArgument
years :: IntervalArgument
years = String -> IntervalArgument
unsafeIntervalArg String
"years"
months :: IntervalArgument
months :: IntervalArgument
months = String -> IntervalArgument
unsafeIntervalArg String
"months"
weeks :: IntervalArgument
weeks :: IntervalArgument
weeks = String -> IntervalArgument
unsafeIntervalArg String
"weeks"
days :: IntervalArgument
days :: IntervalArgument
days = String -> IntervalArgument
unsafeIntervalArg String
"days"
hours :: IntervalArgument
hours :: IntervalArgument
hours = String -> IntervalArgument
unsafeIntervalArg String
"hours"
minutes :: IntervalArgument
minutes :: IntervalArgument
minutes = String -> IntervalArgument
unsafeIntervalArg String
"mins"
seconds :: IntervalArgument
seconds :: IntervalArgument
seconds = String -> IntervalArgument
unsafeIntervalArg String
"secs"