Add FromField Char
This commit is contained in:
parent
66a5f54153
commit
dc4a302311
@ -9,6 +9,7 @@ module Database.PostgreSQL.Opium.FromField
|
|||||||
|
|
||||||
import Data.Attoparsec.Text
|
import Data.Attoparsec.Text
|
||||||
( Parser
|
( Parser
|
||||||
|
, anyChar
|
||||||
, choice
|
, choice
|
||||||
, decimal
|
, decimal
|
||||||
, double
|
, double
|
||||||
@ -38,14 +39,22 @@ class FromField a where
|
|||||||
validOid :: Proxy a -> Oid -> Bool
|
validOid :: Proxy a -> Oid -> Bool
|
||||||
parseField :: Parser a
|
parseField :: Parser a
|
||||||
|
|
||||||
|
-- | See https://www.postgresql.org/docs/current/datatype-character.html.
|
||||||
instance FromField Text where
|
instance FromField Text where
|
||||||
validOid _ = Oid.text \/ Oid.character \/ Oid.characterVarying
|
validOid _ = Oid.text \/ Oid.character \/ Oid.characterVarying
|
||||||
parseField = takeText
|
parseField = takeText
|
||||||
|
|
||||||
|
-- | See https://www.postgresql.org/docs/current/datatype-character.html.
|
||||||
instance FromField String where
|
instance FromField String where
|
||||||
validOid _ = validOid @Text Proxy
|
validOid _ = validOid @Text Proxy
|
||||||
parseField = Text.unpack <$> parseField
|
parseField = Text.unpack <$> parseField
|
||||||
|
|
||||||
|
-- | See https://www.postgresql.org/docs/current/datatype-character.html.
|
||||||
|
-- This instance accepts all character types but fails to decode fields that are not exactly one character.
|
||||||
|
instance FromField Char where
|
||||||
|
validOid _ = validOid @Text Proxy
|
||||||
|
parseField = anyChar
|
||||||
|
|
||||||
instance FromField Int where
|
instance FromField Int where
|
||||||
validOid _ = Oid.smallint \/ Oid.integer \/ Oid.bigint
|
validOid _ = Oid.smallint \/ Oid.integer \/ Oid.bigint
|
||||||
parseField = signed decimal
|
parseField = signed decimal
|
||||||
|
@ -30,6 +30,12 @@ newtype AString = AString
|
|||||||
|
|
||||||
instance FromRow AString where
|
instance FromRow AString where
|
||||||
|
|
||||||
|
newtype AChar = AChar
|
||||||
|
{ char :: Char
|
||||||
|
} deriving (Eq, Generic, Show)
|
||||||
|
|
||||||
|
instance FromRow AChar where
|
||||||
|
|
||||||
newtype AFloat = AFloat
|
newtype AFloat = AFloat
|
||||||
{ float :: Float
|
{ float :: Float
|
||||||
} deriving (Eq, Generic, Show)
|
} deriving (Eq, Generic, Show)
|
||||||
@ -90,6 +96,17 @@ spec = do
|
|||||||
it "Decodes character varying" $ \conn -> do
|
it "Decodes character varying" $ \conn -> do
|
||||||
shouldFetch conn "SELECT 'Hello, World!'::CHARACTER VARYING (20) AS string" [AString "Hello, World!"]
|
shouldFetch conn "SELECT 'Hello, World!'::CHARACTER VARYING (20) AS string" [AString "Hello, World!"]
|
||||||
|
|
||||||
|
describe "FromField Char" $ do
|
||||||
|
it "Decodes text" $ \conn -> do
|
||||||
|
shouldFetch conn "SELECT 'X'::TEXT AS char" [AChar 'X']
|
||||||
|
|
||||||
|
it "Decodes character" $ \conn -> do
|
||||||
|
shouldFetch conn "SELECT 'XYZ'::CHARACTER(1) AS char" [AChar 'X']
|
||||||
|
shouldFetch conn "SELECT ''::CHARACTER(1) AS char" [AChar ' ']
|
||||||
|
|
||||||
|
it "Decodes character varying" $ \conn -> do
|
||||||
|
shouldFetch conn "SELECT 'X'::CHARACTER VARYING (20) AS char" [AChar 'X']
|
||||||
|
|
||||||
describe "FromField Float" $ do
|
describe "FromField Float" $ do
|
||||||
it "Decodes real" $ \conn -> do
|
it "Decodes real" $ \conn -> do
|
||||||
shouldFetch conn "SELECT 4.2::real AS float" [AFloat 4.2]
|
shouldFetch conn "SELECT 4.2::real AS float" [AFloat 4.2]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user