@@ -13,7 +13,7 @@ module Rel8.Expr.Time
13 , diffTime
13 , diffTime
14 , subtractTime
14 , subtractTime
16− -- * Working with @NominalDiffTime@
16+ -- * Working with @CalendarDiffTime@
17 , scaleInterval
17 , scaleInterval
18 , second, seconds
18 , second, seconds
19 , minute, minutes
19 , minute, minutes
@@ -35,7 +35,8 @@ import Rel8.Expr.Opaleye ( unsafeCastExpr, unsafeLiteral )
37import Data.Time.Calendar ( Day )
37import Data.Time.Calendar ( Day )
38−import Data.Time.Clock ( NominalDiffTime, UTCTime )
38+import Data.Time.Clock ( UTCTime )
39+import Data.Time.LocalTime ( CalendarDiffTime )
41-- | Corresponds to @date(now())@.
42-- | Corresponds to @date(now())@.
@@ -74,93 +75,93 @@ now = nullaryFunction "now"
76-- | Add a time interval to a point in time, yielding a new point in time.
77-- | Add a time interval to a point in time, yielding a new point in time.
77−addTime :: Expr NominalDiffTime -> Expr UTCTime -> Expr UTCTime
78+addTime :: Expr CalendarDiffTime -> Expr UTCTime -> Expr UTCTime
78addTime = flip (binaryOperator "+")
79addTime = flip (binaryOperator "+")
81-- | Find the duration between two times.
82-- | Find the duration between two times.
82−diffTime :: Expr UTCTime -> Expr UTCTime -> Expr NominalDiffTime
83+diffTime :: Expr UTCTime -> Expr UTCTime -> Expr CalendarDiffTime
83diffTime = binaryOperator "-"
84diffTime = binaryOperator "-"
86-- | Subtract a time interval from a point in time, yielding a new point in time.
87-- | Subtract a time interval from a point in time, yielding a new point in time.
87−subtractTime :: Expr NominalDiffTime -> Expr UTCTime -> Expr UTCTime
88+subtractTime :: Expr CalendarDiffTime -> Expr UTCTime -> Expr UTCTime
88subtractTime = flip (binaryOperator "-")
89subtractTime = flip (binaryOperator "-")
91−scaleInterval :: Expr Double -> Expr NominalDiffTime -> Expr NominalDiffTime
92+scaleInterval :: Expr Double -> Expr CalendarDiffTime -> Expr CalendarDiffTime
92scaleInterval = binaryOperator "*"
93scaleInterval = binaryOperator "*"
95-- | An interval of one second.
96-- | An interval of one second.
96−second :: Expr NominalDiffTime
97+second :: Expr CalendarDiffTime
97second = singleton "second"
98second = singleton "second"
100-- | Create a literal interval from a number of seconds.
101-- | Create a literal interval from a number of seconds.
101−seconds :: Expr Double -> Expr NominalDiffTime
102+seconds :: Expr Double -> Expr CalendarDiffTime
102seconds = (`scaleInterval` second)
103seconds = (`scaleInterval` second)
105-- | An interval of one minute.
106-- | An interval of one minute.
106−minute :: Expr NominalDiffTime
107+minute :: Expr CalendarDiffTime
107minute = singleton "minute"
108minute = singleton "minute"
110-- | Create a literal interval from a number of minutes.
111-- | Create a literal interval from a number of minutes.
111−minutes :: Expr Double -> Expr NominalDiffTime
112+minutes :: Expr Double -> Expr CalendarDiffTime
112minutes = (`scaleInterval` minute)
113minutes = (`scaleInterval` minute)
115-- | An interval of one hour.
116-- | An interval of one hour.
116−hour :: Expr NominalDiffTime
117+hour :: Expr CalendarDiffTime
117hour = singleton "hour"
118hour = singleton "hour"
120-- | Create a literal interval from a number of hours.
121-- | Create a literal interval from a number of hours.
121−hours :: Expr Double -> Expr NominalDiffTime
122+hours :: Expr Double -> Expr CalendarDiffTime
122hours = (`scaleInterval` hour)
123hours = (`scaleInterval` hour)
125-- | An interval of one day.
126-- | An interval of one day.
126−day :: Expr NominalDiffTime
127+day :: Expr CalendarDiffTime
127day = singleton "day"
128day = singleton "day"
130-- | Create a literal interval from a number of days.
131-- | Create a literal interval from a number of days.
131−days :: Expr Double -> Expr NominalDiffTime
132+days :: Expr Double -> Expr CalendarDiffTime
132days = (`scaleInterval` day)
133days = (`scaleInterval` day)
135-- | An interval of one week.
136-- | An interval of one week.
136−week :: Expr NominalDiffTime
137+week :: Expr CalendarDiffTime
137week = singleton "week"
138week = singleton "week"
140-- | Create a literal interval from a number of weeks.
141-- | Create a literal interval from a number of weeks.
141−weeks :: Expr Double -> Expr NominalDiffTime
142+weeks :: Expr Double -> Expr CalendarDiffTime
142weeks = (`scaleInterval` week)
143weeks = (`scaleInterval` week)
145-- | An interval of one month.
146-- | An interval of one month.
146−month :: Expr NominalDiffTime
147+month :: Expr CalendarDiffTime
147month = singleton "month"
148month = singleton "month"
150-- | Create a literal interval from a number of months.
151-- | Create a literal interval from a number of months.
151−months :: Expr Double -> Expr NominalDiffTime
152+months :: Expr Double -> Expr CalendarDiffTime
152months = (`scaleInterval` month)
153months = (`scaleInterval` month)
155-- | An interval of one year.
156-- | An interval of one year.
156−year :: Expr NominalDiffTime
157+year :: Expr CalendarDiffTime
157year = singleton "year"
158year = singleton "year"
160-- | Create a literal interval from a number of years.
161-- | Create a literal interval from a number of years.
161−years :: Expr Double -> Expr NominalDiffTime
162+years :: Expr Double -> Expr CalendarDiffTime
162years = (`scaleInterval` year)
163years = (`scaleInterval` year)
165−singleton :: String -> Expr NominalDiffTime
166+singleton :: String -> Expr CalendarDiffTime
166singleton unit = unsafeLiteral $ "'1 " ++ unit ++ "'"
167singleton unit = unsafeLiteral $ "'1 " ++ unit ++ "'"