git.iko.soy/typeable/postgresql-simple
on master help sign in
Add support for case-insensitive
bcbacfeLeon P Smith
postgresql-simple.cabal+1
@@ -58,6 +58,7 @@ Library
58 blaze-builder,
58 blaze-builder,
59 blaze-textual,
59 blaze-textual,
60 bytestring >= 0.9,
60 bytestring >= 0.9,
61+ case-insensitive,
61 containers,
62 containers,
62 hashable,
63 hashable,
63 postgresql-libpq >= 0.9,
64 postgresql-libpq >= 0.9,
src/Database/PostgreSQL/Simple/FromField.hs+24
@@ -142,6 +142,8 @@ import qualified Data.ByteString.Lazy as LB
142import qualified Data.Text as ST
142import qualified Data.Text as ST
143import qualified Data.Text.Encoding as ST
143import qualified Data.Text.Encoding as ST
144import qualified Data.Text.Lazy as LT
144import qualified Data.Text.Lazy as LT
145+import Data.CaseInsensitive (CI)
146+import qualified Data.CaseInsensitive as CI
145import Data.UUID (UUID)
147import Data.UUID (UUID)
146import qualified Data.UUID as UUID
148import qualified Data.UUID as UUID
147import Data.Scientific (Scientific)
149import Data.Scientific (Scientific)
@@ -397,6 +399,28 @@ instance FromField ST.Text where
397instance FromField LT.Text where
399instance FromField LT.Text where
398 fromField f dat = LT.fromStrict <$> fromField f dat
400 fromField f dat = LT.fromStrict <$> fromField f dat
399
401
402+-- | citext
403+instance FromField (CI ST.Text) where
404+ fromField f mdat = do
405+ typ <- typename f
406+ if typ /= "citext"
407+ then returnError Incompatible f ""
408+ else case mdat of
409+ Nothing -> returnError UnexpectedNull f ""
410+ Just dat -> either left (pure . CI.mk)
411+ (ST.decodeUtf8' dat)
412+
413+-- | citext
414+instance FromField (CI LT.Text) where
415+ fromField f mdat = do
416+ typ <- typename f
417+ if typ /= "citext"
418+ then returnError Incompatible f ""
419+ else case mdat of
420+ Nothing -> returnError UnexpectedNull f ""
421+ Just dat -> either left (pure . CI.mk . LT.fromStrict)
422+ (ST.decodeUtf8' dat)
423+
400-- | name, text, \"char\", bpchar, varchar
424-- | name, text, \"char\", bpchar, varchar
401instance FromField [Char] where
425instance FromField [Char] where
402 fromField f dat = ST.unpack <$> fromField f dat
426 fromField f dat = ST.unpack <$> fromField f dat