hdbc-aeson 0.1.0.0 → 0.1.1.0
raw patch · 4 files changed
+80/−80 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- HDBC.Aeson: instance Convertible SqlValue Value
- HDBC.Aeson: instance ToJSON SqlValue
- HDBC.Aeson: queryJ :: (IConnection a, FromJSON b) => a -> Statement -> [SqlValue] -> IO b
- HDBC.Aeson: quickQueryJ :: (IConnection a, FromJSON b) => a -> String -> [SqlValue] -> IO b
+ Database.HDBC.Aeson: instance Convertible SqlValue Value
+ Database.HDBC.Aeson: instance ToJSON SqlValue
+ Database.HDBC.Aeson: queryJ :: (IConnection a, FromJSON b) => a -> Statement -> [SqlValue] -> IO b
+ Database.HDBC.Aeson: quickQueryJ :: (IConnection a, FromJSON b) => a -> String -> [SqlValue] -> IO b
Files
- Database/HDBC/Aeson.hs +74/−0
- HDBC/Aeson.hs +0/−74
- README.md +3/−3
- hdbc-aeson.cabal +3/−3
+ Database/HDBC/Aeson.hs view
@@ -0,0 +1,74 @@+{-# LANGUAGE OverloadedStrings, MultiParamTypeClasses #-} +module Database.HDBC.Aeson where+import Data.Aeson+import Data.Convertible +import Database.HDBC+import qualified Data.Text as T+import qualified Data.Text.Encoding as T++-- | Run a SQL query and return a value that can be cast via +-- a FromJSON instance.+queryJ :: (IConnection a, FromJSON b)+ => a+ -> Statement+ -> [SqlValue]+ -> IO b+queryJ conn stmt vs = do+ _ <- execute stmt vs+ rows <- fetchAllRowsMap' stmt+ let result = fromJSON . toJSON $ rows+ case result of + Error e -> error $ "Could not parse via JSON: " ++ e+ Success x -> return x++-- | A quick way to do a query and cast it to a FromJSON. +quickQueryJ :: (IConnection a, FromJSON b)+ => a+ -> String+ -> [SqlValue]+ -> IO b+quickQueryJ conn query xs = do+ stmt <- prepare conn query+ queryJ conn stmt xs+++instance ToJSON SqlValue where+ toJSON (SqlByteString x) = String . T.decodeUtf8 $ x+ toJSON (SqlInt32 x) = Number $ fromIntegral x+ toJSON (SqlInteger x) = Number $ fromIntegral x+ toJSON (SqlRational x) = Number $ realToFrac x+ toJSON (SqlDouble x) = Number $ realToFrac x+ toJSON (SqlBool x) = Bool x+ toJSON (SqlLocalTime x) = String . T.pack . show $ x+ toJSON SqlNull = Null+ toJSON x = error $ "Please implement ToJSON instance for SqlValue: " ++ show x++instance Convertible SqlValue Value where+ safeConvert (SqlString x) = return . String . T.pack $ x+ safeConvert (SqlByteString x) = return . String . T.decodeUtf8 $ x+ safeConvert (SqlWord32 x) = return . Number . fromIntegral $ x+ safeConvert (SqlWord64 x) = return . Number . fromIntegral $ x+ safeConvert (SqlInt32 x) = return . Number . fromIntegral $ x+ safeConvert (SqlInt64 x) = return . Number . fromIntegral $ x+ safeConvert (SqlInteger x) = return . Number . fromIntegral $ x+ safeConvert (SqlChar x) = return . String . T.pack $ [x]+ safeConvert (SqlBool x) = return . Bool $ x+ safeConvert (SqlDouble x) = return . Number . realToFrac $ x+ safeConvert (SqlRational x) = return . Number . realToFrac $ x+ safeConvert (SqlNull) = return Null+ safeConvert x = error $ "Please implement Convertible SqlValue Value for " ++ show x+ {-+ implement these later:++ SqlLocalDate Day + SqlLocalTimeOfDay TimeOfDay + SqlZonedLocalTimeOfDay TimeOfDay TimeZone + SqlLocalTime LocalTime + SqlZonedTime ZonedTime + SqlUTCTime UTCTime + SqlDiffTime NominalDiffTime + SqlPOSIXTime POSIXTime + -}+++
− HDBC/Aeson.hs
@@ -1,74 +0,0 @@-{-# LANGUAGE OverloadedStrings, MultiParamTypeClasses #-} -module HDBC.Aeson where-import Data.Aeson-import Data.Convertible -import Database.HDBC-import qualified Data.Text as T-import qualified Data.Text.Encoding as T---- | Run a SQL query and return a value that can be cast via --- a FromJSON instance.-queryJ :: (IConnection a, FromJSON b)- => a- -> Statement- -> [SqlValue]- -> IO b-queryJ conn stmt vs = do- _ <- execute stmt vs- rows <- fetchAllRowsMap' stmt- let result = fromJSON . toJSON $ rows- case result of - Error e -> error $ "Could not parse via JSON: " ++ e- Success x -> return x---- | A quick way to do a query and cast it to a FromJSON. -quickQueryJ :: (IConnection a, FromJSON b)- => a- -> String- -> [SqlValue]- -> IO b-quickQueryJ conn query xs = do- stmt <- prepare conn query- queryJ conn stmt xs---instance ToJSON SqlValue where- toJSON (SqlByteString x) = String . T.decodeUtf8 $ x- toJSON (SqlInt32 x) = Number $ fromIntegral x- toJSON (SqlInteger x) = Number $ fromIntegral x- toJSON (SqlRational x) = Number $ realToFrac x- toJSON (SqlDouble x) = Number $ realToFrac x- toJSON (SqlBool x) = Bool x- toJSON (SqlLocalTime x) = String . T.pack . show $ x- toJSON SqlNull = Null- toJSON x = error $ "Please implement ToJSON instance for SqlValue: " ++ show x--instance Convertible SqlValue Value where- safeConvert (SqlString x) = return . String . T.pack $ x- safeConvert (SqlByteString x) = return . String . T.decodeUtf8 $ x- safeConvert (SqlWord32 x) = return . Number . fromIntegral $ x- safeConvert (SqlWord64 x) = return . Number . fromIntegral $ x- safeConvert (SqlInt32 x) = return . Number . fromIntegral $ x- safeConvert (SqlInt64 x) = return . Number . fromIntegral $ x- safeConvert (SqlInteger x) = return . Number . fromIntegral $ x- safeConvert (SqlChar x) = return . String . T.pack $ [x]- safeConvert (SqlBool x) = return . Bool $ x- safeConvert (SqlDouble x) = return . Number . realToFrac $ x- safeConvert (SqlRational x) = return . Number . realToFrac $ x- safeConvert (SqlNull) = return Null- safeConvert x = error $ "Please implement Convertible SqlValue Value for " ++ show x- {-- implement these later:-- SqlLocalDate Day - SqlLocalTimeOfDay TimeOfDay - SqlZonedLocalTimeOfDay TimeOfDay TimeZone - SqlLocalTime LocalTime - SqlZonedTime ZonedTime - SqlUTCTime UTCTime - SqlDiffTime NominalDiffTime - SqlPOSIXTime POSIXTime - -}---
README.md view
@@ -1,8 +1,8 @@ # hdbc-aeson -Provides a way to reuse FromJSON instances to unmarshall-values from an HDBC database to Haskell values. See-HDBC.Aeson module for API.+Provides a way to reuse FromJSON instances to unmarshall values from an HDBC+database to Haskell values. See HDBC.Aeson module or [Hackage+page](http://hackage.haskell.org/package/hdbc-aeson) for API. ## Author
hdbc-aeson.cabal view
@@ -2,9 +2,9 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: hdbc-aeson-version: 0.1.0.0+version: 0.1.1.0 synopsis: Deserialize from HDBC rows to FromJSON instances--- description: +description: Deserialize from HDBC rows to FromJSON instances homepage: https://github.com/danchoi/hdbc-aeson license: MIT license-file: LICENSE@@ -17,7 +17,7 @@ cabal-version: >=1.10 library- exposed-modules: HDBC.Aeson+ exposed-modules: Database.HDBC.Aeson -- other-modules: -- other-extensions: build-depends: base >=4.6 && <4.8