Implement date -> Day decoding

This commit is contained in:
2023-09-23 11:11:29 +02:00
parent 4d21e67130
commit 126b8ee6e9
6 changed files with 32 additions and 0 deletions
@@ -11,7 +11,9 @@ import Data.Attoparsec.ByteString (Parser)
import Data.Bits (Bits (..))
import Data.ByteString (ByteString)
import Data.Functor (($>))
import Data.Int (Int32)
import Data.Proxy (Proxy (..))
import Data.Time (Day (..))
import Data.Text (Text)
import Data.Word (Word32, Word64)
import Database.PostgreSQL.LibPQ (Oid)
@@ -107,3 +109,11 @@ boolParser = AP.choice
instance FromField Bool where
validOid Proxy = Oid.boolean
parseField = boolParser
-- | See https://www.postgresql.org/docs/current/datatype-datetime.html.
-- Relevant as well: https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/adt/datetime.c;h=267dfd37b2e8b9bc63797c69b9ca2e45e6bfde61;hb=HEAD#l267.
instance FromField Day where
validOid Proxy = Oid.date
parseField = fromJulianDay . fromIntegral <$> intParser @Int32
where
fromJulianDay x = ModifiedJulianDay $ x + 51544
+4
View File
@@ -48,3 +48,7 @@ doublePrecision = eq $ Oid 701
-- | Boolean
boolean :: Oid -> Bool
boolean = eq $ Oid 16
-- | Single days/dates.
date :: Oid -> Bool
date = eq $ Oid 1082