git.iko.soy/typeable/postgresql-simple
on master help sign in
Add support for case-insensitive

Closes #130

commitbcbacfe9f2184692c5426ab9f6b89a2c4c4752b0 authorLeon P Smith <leon@melding-monads.com> dateMon 24 Nov 2014, 17:39 (12 years ago) parent96bdb9e
2 files changed+25
postgresql-simple.cabal+1 src/Database/PostgreSQL/Simple/FromField.hs+24
postgresql-simple.cabal+1
@@ -58,6 +58,7 @@ Library
5858 blaze-builder,
5959 blaze-textual,
6060 bytestring >= 0.9,
61+ case-insensitive,
6162 containers,
6263 hashable,
6364 postgresql-libpq >= 0.9,
src/Database/PostgreSQL/Simple/FromField.hs+24
@@ -142,6 +142,8 @@ import qualified Data.ByteString.Lazy as LB
142142import qualified Data.Text as ST
143143import qualified Data.Text.Encoding as ST
144144import qualified Data.Text.Lazy as LT
145+import Data.CaseInsensitive (CI)
146+import qualified Data.CaseInsensitive as CI
145147import Data.UUID (UUID)
146148import qualified Data.UUID as UUID
147149import Data.Scientific (Scientific)
@@ -397,6 +399,28 @@ instance FromField ST.Text where
397399instance FromField LT.Text where
398400 fromField f dat = LT.fromStrict <$> fromField f dat
399401
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+
400424-- | name, text, \"char\", bpchar, varchar
401425instance FromField [Char] where
402426 fromField f dat = ST.unpack <$> fromField f dat