Implement date -> Day decoding
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user