module Database.RethinkDB.Time where
import Database.RethinkDB.Wire.Term
import Database.RethinkDB.ReQL
now :: ReQL
now = op NOW ()
time :: ReQL -> ReQL -> ReQL -> ReQL -> ReQL -> ReQL -> ReQL -> ReQL
time y m d hh mm ss tz = op TIME [y, m, d, hh, mm, ss, tz]
epochTime :: ReQL -> ReQL
epochTime t = op EPOCH_TIME [t]
iso8601 :: ReQL -> ReQL
iso8601 t = op ISO8601 [t]
inTimezone :: Expr time => ReQL -> time -> ReQL
inTimezone tz t = op IN_TIMEZONE (t, tz)
during :: (Expr left, Expr right, Expr time) => Bound left -> Bound right -> time -> ReQL
during l r t = op' DURING (t, getBound l, getBound r) [
"left_bound" ?:= closedOrOpen l, "right_bound" ?:= closedOrOpen r]
timezone, date, timeOfDay, year, month, day, dayOfWeek, dayOfYear, hours, minutes, seconds ::
Expr time => time -> ReQL
timezone t = op TIMEZONE [t]
date t = op DATE [t]
timeOfDay t = op TIME_OF_DAY [t]
year t = op YEAR [t]
month t = op MONTH [t]
day t = op DAY [t]
dayOfWeek t = op DAY_OF_WEEK [t]
dayOfYear t = op DAY_OF_YEAR [t]
hours t = op HOURS [t]
minutes t = op MINUTES [t]
seconds t = op SECONDS [t]
toIso8601, toEpochTime :: Expr t => t -> ReQL
toIso8601 t = op TO_ISO8601 [t]
toEpochTime t = op TO_EPOCH_TIME [t]