packages feed

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 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