on master help sign in
Switch to CalendarDiffTime
commitca7aaefee842761e4694847f92ae45c5bf1089cf authorShane O'Brien <shane.obrien@circuithub.com> dateTue 30 Mar 2021, 12:35 (6 years ago) parent2ff1c5f
7 files changed+46−59
src/Rel8/Expr/Time.hs+22−21 src/Rel8/Type.hs+9−10 src/Rel8/Type/Eq.hs+3−4 src/Rel8/Type/Monoid.hs+3−7 src/Rel8/Type/Ord.hs+5−8 src/Rel8/Type/Semigroup.hs+2−6 src/Rel8/Type/Sum.hs+2−3
src/Rel8/Expr/Time.hs+22−21
@@ -13,7 +13,7 @@ module Rel8.Expr.Time
1313 , diffTime
1414 , subtractTime
1515
16− -- * Working with @NominalDiffTime@
16+ -- * Working with @CalendarDiffTime@
1717 , scaleInterval
1818 , second, seconds
1919 , minute, minutes
@@ -35,7 +35,8 @@ import Rel8.Expr.Opaleye ( unsafeCastExpr, unsafeLiteral )
3535
3636-- time
3737import Data.Time.Calendar ( Day )
38−import Data.Time.Clock ( NominalDiffTime, UTCTime )
38+import Data.Time.Clock ( UTCTime )
39+import Data.Time.LocalTime ( CalendarDiffTime )
3940
4041
4142-- | Corresponds to @date(now())@.
@@ -74,93 +75,93 @@ now = nullaryFunction "now"
7475
7576
7677-- | 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
7879addTime = flip (binaryOperator "+")
7980
8081
8182-- | Find the duration between two times.
82−diffTime :: Expr UTCTime -> Expr UTCTime -> Expr NominalDiffTime
83+diffTime :: Expr UTCTime -> Expr UTCTime -> Expr CalendarDiffTime
8384diffTime = binaryOperator "-"
8485
8586
8687-- | 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
8889subtractTime = flip (binaryOperator "-")
8990
9091
91−scaleInterval :: Expr Double -> Expr NominalDiffTime -> Expr NominalDiffTime
92+scaleInterval :: Expr Double -> Expr CalendarDiffTime -> Expr CalendarDiffTime
9293scaleInterval = binaryOperator "*"
9394
9495
9596-- | An interval of one second.
96−second :: Expr NominalDiffTime
97+second :: Expr CalendarDiffTime
9798second = singleton "second"
9899
99100
100101-- | Create a literal interval from a number of seconds.
101−seconds :: Expr Double -> Expr NominalDiffTime
102+seconds :: Expr Double -> Expr CalendarDiffTime
102103seconds = (`scaleInterval` second)
103104
104105
105106-- | An interval of one minute.
106−minute :: Expr NominalDiffTime
107+minute :: Expr CalendarDiffTime
107108minute = singleton "minute"
108109
109110
110111-- | Create a literal interval from a number of minutes.
111−minutes :: Expr Double -> Expr NominalDiffTime
112+minutes :: Expr Double -> Expr CalendarDiffTime
112113minutes = (`scaleInterval` minute)
113114
114115
115116-- | An interval of one hour.
116−hour :: Expr NominalDiffTime
117+hour :: Expr CalendarDiffTime
117118hour = singleton "hour"
118119
119120
120121-- | Create a literal interval from a number of hours.
121−hours :: Expr Double -> Expr NominalDiffTime
122+hours :: Expr Double -> Expr CalendarDiffTime
122123hours = (`scaleInterval` hour)
123124
124125
125126-- | An interval of one day.
126−day :: Expr NominalDiffTime
127+day :: Expr CalendarDiffTime
127128day = singleton "day"
128129
129130
130131-- | Create a literal interval from a number of days.
131−days :: Expr Double -> Expr NominalDiffTime
132+days :: Expr Double -> Expr CalendarDiffTime
132133days = (`scaleInterval` day)
133134
134135
135136-- | An interval of one week.
136−week :: Expr NominalDiffTime
137+week :: Expr CalendarDiffTime
137138week = singleton "week"
138139
139140
140141-- | Create a literal interval from a number of weeks.
141−weeks :: Expr Double -> Expr NominalDiffTime
142+weeks :: Expr Double -> Expr CalendarDiffTime
142143weeks = (`scaleInterval` week)
143144
144145
145146-- | An interval of one month.
146−month :: Expr NominalDiffTime
147+month :: Expr CalendarDiffTime
147148month = singleton "month"
148149
149150
150151-- | Create a literal interval from a number of months.
151−months :: Expr Double -> Expr NominalDiffTime
152+months :: Expr Double -> Expr CalendarDiffTime
152153months = (`scaleInterval` month)
153154
154155
155156-- | An interval of one year.
156−year :: Expr NominalDiffTime
157+year :: Expr CalendarDiffTime
157158year = singleton "year"
158159
159160
160161-- | Create a literal interval from a number of years.
161−years :: Expr Double -> Expr NominalDiffTime
162+years :: Expr Double -> Expr CalendarDiffTime
162163years = (`scaleInterval` year)
163164
164165
165−singleton :: String -> Expr NominalDiffTime
166+singleton :: String -> Expr CalendarDiffTime
166167singleton unit = unsafeLiteral $ "'1 " ++ unit ++ "'"
src/Rel8/Type.hs+9−10
@@ -58,8 +58,12 @@ import qualified Data.Text.Lazy.Encoding as Lazy ( decodeUtf8 )
5858
5959-- time
6060import Data.Time.Calendar ( Day )
61−import Data.Time.Clock ( DiffTime, NominalDiffTime, UTCTime )
62−import Data.Time.LocalTime ( LocalTime, TimeOfDay )
61+import Data.Time.Clock ( UTCTime )
62+import Data.Time.LocalTime
63+ ( CalendarDiffTime( CalendarDiffTime )
64+ , LocalTime
65+ , TimeOfDay
66+ )
6367import Data.Time.Format ( formatTime, defaultTimeLocale )
6468
6569-- uuid
@@ -221,22 +225,17 @@ instance DBType TimeOfDay where
221225
222226
223227-- | Corresponds to @interval@
224−instance DBType DiffTime where
228+instance DBType CalendarDiffTime where
225229 typeInformation = TypeInformation
226230 { encode =
227231 Opaleye.ConstExpr . Opaleye.OtherLit .
228− formatTime defaultTimeLocale "'%0Es'"
229− , decode = Hasql.interval
232+ formatTime defaultTimeLocale "'%bmon %0Es'"
233+ , decode = CalendarDiffTime 0 . realToFrac <$> Hasql.interval
230234 , typeName = "interval"
231235 , out = id
232236 }
233237
234238
235−instance DBType NominalDiffTime where
236− typeInformation =
237− mapTypeInformation @DiffTime realToFrac realToFrac typeInformation
238−
239−
240239-- | Corresponds to @text@
241240instance DBType Text where
242241 typeInformation = TypeInformation
src/Rel8/Type/Eq.hs+3−4
@@ -39,8 +39,8 @@ import qualified Data.Text.Lazy as Lazy ( Text )
3939
4040-- time
4141import Data.Time.Calendar ( Day )
42−import Data.Time.Clock ( UTCTime, DiffTime, NominalDiffTime )
43−import Data.Time.LocalTime ( TimeOfDay, LocalTime )
42+import Data.Time.Clock ( UTCTime )
43+import Data.Time.LocalTime ( CalendarDiffTime, LocalTime, TimeOfDay )
4444
4545-- uuid
4646import Data.UUID ( UUID )
@@ -95,8 +95,7 @@ instance DBEq UTCTime
9595instance DBEq Day
9696instance DBEq LocalTime
9797instance DBEq TimeOfDay
98−instance DBEq DiffTime
99−instance DBEq NominalDiffTime
98+instance DBEq CalendarDiffTime
10099instance DBEq Text
101100instance DBEq Lazy.Text
102101instance DBEq (CI Text)
src/Rel8/Type/Monoid.hs+3−7
@@ -39,7 +39,7 @@ import Data.Text ( Text )
3939import qualified Data.Text.Lazy as Lazy ( Text )
4040
4141-- time
42−import Data.Time.Clock ( DiffTime, NominalDiffTime )
42+import Data.Time.LocalTime ( CalendarDiffTime( CalendarDiffTime ) )
4343
4444
4545-- | The class of 'DBType's that form a semigroup. This class is purely a Rel8
@@ -54,12 +54,8 @@ instance Sql DBType a => DBMonoid [a] where
5454 memptyExpr = sempty nullabilization typeInformation
5555
5656
57−instance DBMonoid DiffTime where
58− memptyExpr = litExpr 0
59−
60−
61−instance DBMonoid NominalDiffTime where
62− memptyExpr = litExpr 0
57+instance DBMonoid CalendarDiffTime where
58+ memptyExpr = litExpr (CalendarDiffTime 0 0)
6359
6460
6561instance DBMonoid Text where
src/Rel8/Type/Ord.hs+5−8
@@ -37,8 +37,8 @@ import qualified Data.Text.Lazy as Lazy ( Text )
3737
3838-- time
3939import Data.Time.Calendar ( Day )
40−import Data.Time.Clock ( DiffTime, NominalDiffTime, UTCTime )
41−import Data.Time.LocalTime ( TimeOfDay, LocalTime )
40+import Data.Time.Clock ( UTCTime )
41+import Data.Time.LocalTime ( CalendarDiffTime, LocalTime, TimeOfDay )
4242
4343-- uuid
4444import Data.UUID ( UUID )
@@ -60,8 +60,7 @@ instance DBOrd UTCTime
6060instance DBOrd Day
6161instance DBOrd LocalTime
6262instance DBOrd TimeOfDay
63−instance DBOrd DiffTime
64−instance DBOrd NominalDiffTime
63+instance DBOrd CalendarDiffTime
6564instance DBOrd Text
6665instance DBOrd Lazy.Text
6766instance DBOrd (CI Text)
@@ -93,8 +92,7 @@ instance DBMax UTCTime
9392instance DBMax Day
9493instance DBMax LocalTime
9594instance DBMax TimeOfDay
96−instance DBMax DiffTime
97−instance DBMax NominalDiffTime
95+instance DBMax CalendarDiffTime
9896instance DBMax Text
9997instance DBMax Lazy.Text
10098instance DBMax (CI Text)
@@ -124,8 +122,7 @@ instance DBMin UTCTime
124122instance DBMin Day
125123instance DBMin LocalTime
126124instance DBMin TimeOfDay
127−instance DBMin DiffTime
128−instance DBMin NominalDiffTime
125+instance DBMin CalendarDiffTime
129126instance DBMin Text
130127instance DBMin Lazy.Text
131128instance DBMin (CI Text)
src/Rel8/Type/Semigroup.hs+2−6
@@ -39,7 +39,7 @@ import Data.Text ( Text )
3939import qualified Data.Text.Lazy as Lazy ( Text )
4040
4141-- time
42−import Data.Time.Clock ( DiffTime, NominalDiffTime )
42+import Data.Time.LocalTime ( CalendarDiffTime )
4343
4444
4545-- | The class of 'DBType's that form a semigroup. This class is purely a Rel8
@@ -59,11 +59,7 @@ instance Sql DBType a => DBSemigroup (NonEmpty a) where
5959 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
6060
6161
62−instance DBSemigroup DiffTime where
63− (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:+))
64−
65−
66−instance DBSemigroup NominalDiffTime where
62+instance DBSemigroup CalendarDiffTime where
6763 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:+))
6864
6965
src/Rel8/Type/Sum.hs+2−3
@@ -24,7 +24,7 @@ import Rel8.Type ( DBType )
2424import Data.Scientific ( Scientific )
2525
2626-- time
27−import Data.Time.Clock ( DiffTime, NominalDiffTime )
27+import Data.Time.LocalTime ( CalendarDiffTime )
2828
2929
3030-- | The class of database types that support the @sum()@ aggregation function.
@@ -36,8 +36,7 @@ instance DBSum Int64
3636instance DBSum Float
3737instance DBSum Double
3838instance DBSum Scientific
39−instance DBSum DiffTime
40−instance DBSum NominalDiffTime
39+instance DBSum CalendarDiffTime
4140
4241
4342instance {-# INCOHERENT #-} (HasNullability a, DBSum (Unnullify a)) =>