Implement UTCTime decoding
Remove LocalTime decoding because it requires IO to convert from Postgres time.
This commit is contained in:
@@ -7,10 +7,11 @@ import Data.ByteString (ByteString)
|
||||
import Data.Time
|
||||
( Day (..)
|
||||
, DiffTime
|
||||
, LocalTime (..)
|
||||
, TimeOfDay (..)
|
||||
, UTCTime (..)
|
||||
, fromGregorian
|
||||
, secondsToDiffTime
|
||||
, timeOfDayToTime
|
||||
)
|
||||
import Data.Text (Text)
|
||||
import Database.PostgreSQL.LibPQ (Connection)
|
||||
@@ -100,11 +101,11 @@ newtype ATimeOfDay = ATimeOfDay
|
||||
|
||||
instance FromRow ATimeOfDay where
|
||||
|
||||
newtype ALocalTime = ALocalTime
|
||||
{ localtime :: LocalTime
|
||||
newtype AUTCTime = AUTCTime
|
||||
{ utctime :: UTCTime
|
||||
} deriving (Eq, Generic, Show)
|
||||
|
||||
instance FromRow ALocalTime where
|
||||
instance FromRow AUTCTime where
|
||||
|
||||
newtype ARawField = ARawField
|
||||
{ raw :: Opium.RawField ByteString
|
||||
@@ -283,20 +284,20 @@ spec = do
|
||||
shouldFetch conn "SELECT time '00:01:00' AS timeofday" [ATimeOfDay $ TimeOfDay 0 1 0]
|
||||
shouldFetch conn "SELECT time '13:07:43' AS timeofday" [ATimeOfDay $ TimeOfDay 13 7 43]
|
||||
|
||||
describe "FromField LocalTime" $ do
|
||||
it "Decodes timestamp" $ \conn -> do
|
||||
let ts0 = LocalTime (fromGregorian 2023 10 2) (TimeOfDay 12 42 23)
|
||||
shouldFetch conn "SELECT timestamp '2023-10-02 12:42:23' AS localtime" [ALocalTime ts0]
|
||||
describe "FromField UTCTime" $ do
|
||||
it "Decodes timestamp with timezone" $ \conn -> do
|
||||
let ts0 = UTCTime (fromGregorian 2023 10 2) (timeOfDayToTime $ TimeOfDay 12 42 23)
|
||||
shouldFetch conn "SELECT timestamp with time zone '2023-10-02 12:42:23' AS utctime" [AUTCTime ts0]
|
||||
|
||||
let ts1 = LocalTime (fromGregorian 294275 12 31) (TimeOfDay 23 59 59)
|
||||
shouldFetch conn "SELECT timestamp '294275-12-31 23:59:59' AS localtime" [ALocalTime ts1]
|
||||
let ts1 = UTCTime (fromGregorian 294275 12 31) (timeOfDayToTime $ TimeOfDay 23 59 59)
|
||||
shouldFetch conn "SELECT timestamp with time zone '294275-12-31 23:59:59' AS utctime" [AUTCTime ts1]
|
||||
|
||||
let ts2 = LocalTime (fromGregorian 1 1 1) (TimeOfDay 0 0 0)
|
||||
shouldFetch conn "SELECT timestamp '0001-01-01 00:00:00' AS localtime" [ALocalTime ts2]
|
||||
let ts2 = UTCTime (fromGregorian 1 1 1) (timeOfDayToTime $ TimeOfDay 0 0 0)
|
||||
shouldFetch conn "SELECT timestamp with time zone '0001-01-01 00:00:00' AS utctime" [AUTCTime ts2]
|
||||
|
||||
-- See note at the FromField Day instance.
|
||||
let ts3 = LocalTime (fromGregorian 0 2 29) (TimeOfDay 0 0 0)
|
||||
shouldFetch conn "SELECT timestamp '0001-02-29 BC 00:00:00' AS localtime" [ALocalTime ts3]
|
||||
let ts3 = UTCTime (fromGregorian 0 2 29) (timeOfDayToTime $ TimeOfDay 0 0 0)
|
||||
shouldFetch conn "SELECT timestamp with time zone '0001-02-29 BC 00:00:00' AS utctime" [AUTCTime ts3]
|
||||
|
||||
describe "FromField RawField" $ do
|
||||
it "Simply returns the bytestring without decoding it" $ \conn -> do
|
||||
|
||||
Reference in New Issue
Block a user