git.iko.soy/typeable/postgresql-simple
on master help sign in
Merge pull request #85 from basvandijk/uuid
977d2d8Leon P Smith
postgresql-simple.cabal+1
@@ -64,6 +64,7 @@ Library
64 text >= 0.11.1,
64 text >= 0.11.1,
65 time,
65 time,
66 transformers,
66 transformers,
67+ uuid >= 1.3.1,
67 vector
68 vector
68
69
69 extensions: DoAndIfThenElse, OverloadedStrings, BangPatterns, ViewPatterns
70 extensions: DoAndIfThenElse, OverloadedStrings, BangPatterns, ViewPatterns
src/Database/PostgreSQL/Simple/FromField.hs+14
@@ -122,6 +122,8 @@ import qualified Data.ByteString.Lazy as LB
122import qualified Data.Text as ST
122import qualified Data.Text as ST
123import qualified Data.Text.Encoding as ST
123import qualified Data.Text.Encoding as ST
124import qualified Data.Text.Lazy as LT
124import qualified Data.Text.Lazy as LT
125+import Data.UUID (UUID)
126+import qualified Data.UUID as UUID
125
127
126-- | Exception thrown if conversion from a SQL value to a Haskell
128-- | Exception thrown if conversion from a SQL value to a Haskell
127-- value fails.
129-- value fails.
@@ -444,6 +446,18 @@ fromArray typeInfo f = sequence . (parseIt <$>) <$> array delim
444 where f' | Arrays.Array _ <- item = f
446 where f' | Arrays.Array _ <- item = f
445 | otherwise = fElem
447 | otherwise = fElem
446
448
449+-- | uuid
450+instance FromField UUID where
451+ fromField f mbs =
452+ if typeOid f /= $(inlineTypoid TI.uuid)
453+ then returnError Incompatible f ""
454+ else case mbs of
455+ Nothing -> returnError UnexpectedNull f ""
456+ Just bs ->
457+ case UUID.fromASCIIBytes bs of
458+ Nothing -> returnError ConversionFailed f "Invalid UUID"
459+ Just uuid -> pure uuid
460+
447-- | json
461-- | json
448instance FromField JSON.Value where
462instance FromField JSON.Value where
449 fromField f mbs =
463 fromField f mbs =
src/Database/PostgreSQL/Simple/ToField.hs+5
@@ -40,6 +40,8 @@ import qualified Data.ByteString.Lazy as LB
40import qualified Data.Text as ST
40import qualified Data.Text as ST
41import qualified Data.Text.Encoding as ST
41import qualified Data.Text.Encoding as ST
42import qualified Data.Text.Lazy as LT
42import qualified Data.Text.Lazy as LT
43+import Data.UUID (UUID)
44+import qualified Data.UUID as UUID
43import Data.Vector (Vector)
45import Data.Vector (Vector)
44import qualified Data.Vector as V
46import qualified Data.Vector as V
45import qualified Database.PostgreSQL.LibPQ as PQ
47import qualified Database.PostgreSQL.LibPQ as PQ
@@ -232,6 +234,9 @@ instance (ToField a) => ToField (Vector a) where
232 -- Because the ARRAY[...] input syntax is being used, it is possible
234 -- Because the ARRAY[...] input syntax is being used, it is possible
233 -- that the use of type-specific separator characters is unnecessary.
235 -- that the use of type-specific separator characters is unnecessary.
234
236
237+instance ToField UUID where
238+ toField = Plain . inQuotes . fromByteString . UUID.toASCIIBytes
239+
235instance ToField JSON.Value where
240instance ToField JSON.Value where
236 toField = toField . JSON.encode
241 toField = toField . JSON.encode
237
242