hasbolt 0.1.3.3 → 0.1.3.4
raw patch · 9 files changed
+56/−11 lines, 9 filesdep +mtldep −transformersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: mtl
Dependencies removed: transformers
API changes (from Hackage documentation)
- Database.Bolt: class BoltValue a
- Database.Bolt: pack :: BoltValue a => a -> ByteString
- Database.Bolt: unpack :: (BoltValue a, Monad m) => ByteString -> m a
- Database.Bolt: unpackT :: (BoltValue a, Monad m) => UnpackT m a
- Database.Bolt.Lazy: class BoltValue a
- Database.Bolt.Lazy: pack :: BoltValue a => a -> ByteString
- Database.Bolt.Lazy: unpack :: (BoltValue a, Monad m) => ByteString -> m a
- Database.Bolt.Lazy: unpackT :: (BoltValue a, Monad m) => UnpackT m a
+ Database.Bolt: transact :: (MonadError e m, MonadIO m) => BoltActionT m a -> BoltActionT m a
+ Database.Bolt.Lazy: transact :: (MonadError e m, MonadIO m) => BoltActionT m a -> BoltActionT m a
+ Database.Bolt.Serialization: class BoltValue a
+ Database.Bolt.Serialization: class FromStructure a
+ Database.Bolt.Serialization: class ToStructure a
+ Database.Bolt.Serialization: fromStructure :: (FromStructure a, Monad m) => Structure -> m a
+ Database.Bolt.Serialization: pack :: BoltValue a => a -> ByteString
+ Database.Bolt.Serialization: toStructure :: ToStructure a => a -> Structure
+ Database.Bolt.Serialization: type UnpackT = StateT ByteString
+ Database.Bolt.Serialization: unpack :: (BoltValue a, Monad m) => ByteString -> m a
+ Database.Bolt.Serialization: unpackT :: (BoltValue a, Monad m) => UnpackT m a
Files
- hasbolt.cabal +5/−3
- src/Database/Bolt.hs +3/−1
- src/Database/Bolt/Connection.hs +1/−1
- src/Database/Bolt/Lazy.hs +2/−1
- src/Database/Bolt/Serialization.hs +7/−0
- src/Database/Bolt/Transaction.hs +31/−0
- src/Database/Bolt/Value/Instances.hs +5/−4
- src/Database/Bolt/Value/Type.hs +1/−1
- test/Spec.hs +1/−0
hasbolt.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: hasbolt-version: 0.1.3.3+version: 0.1.3.4 license: BSD3 license-file: LICENSE copyright: (c) 2018 Pavel Yakovlev@@ -36,6 +36,7 @@ Database.Bolt Database.Bolt.Lazy Database.Bolt.Lens+ Database.Bolt.Serialization hs-source-dirs: src other-modules: Database.Bolt.Value.Type@@ -48,6 +49,7 @@ Database.Bolt.Connection.Pipe Database.Bolt.Connection Database.Bolt.Record+ Database.Bolt.Transaction default-language: Haskell2010 ghc-options: -Wall build-depends:@@ -57,8 +59,8 @@ containers >=0.5.7.1 && <0.7, binary >=0.8.3.0 && <1.0, data-binary-ieee754 >=0.4.4 && <0.5,- transformers >=0.5.2.0 && <0.6,- network >=2.6.3.1 && <3.1,+ mtl >=2.2.0 && <2.3,+ network >=2.6.3.1 && <3.2, connection >=0.2.8 && <0.4, data-default >=0.7.1.1 && <0.8
src/Database/Bolt.hs view
@@ -2,9 +2,10 @@ ( BoltActionT , connect, close, reset , run, queryP, query, queryP_, query_+ , transact , Pipe , BoltCfg (..)- , BoltValue (..), Value (..), Structure (..), Record, RecordValue (..), at+ , Value (..), Structure (..), Record, RecordValue (..), at , Node (..), Relationship (..), URelationship (..), Path (..) ) where @@ -12,6 +13,7 @@ import Database.Bolt.Connection.Pipe import Database.Bolt.Connection.Type import Database.Bolt.Record+import Database.Bolt.Transaction import Database.Bolt.Value.Instances () import Database.Bolt.Value.Structure () import Database.Bolt.Value.Type
src/Database/Bolt/Connection.hs view
@@ -14,7 +14,7 @@ import Control.Monad (void) import Control.Monad.IO.Class (MonadIO (..), liftIO)-import Control.Monad.Trans.Reader (ReaderT (..), ask, runReaderT)+import Control.Monad.Reader (ReaderT (..), ask, runReaderT) import Data.Text (Text) import Data.Map.Strict (Map, empty)
src/Database/Bolt/Lazy.hs view
@@ -2,9 +2,10 @@ ( BoltActionT , connect, close, reset , run, queryP, query, queryP_, query_+ , transact , Pipe , BoltCfg (..)- , BoltValue (..), Value (..), Structure (..), Record, RecordValue (..), at+ , Value (..), Structure (..), Record, RecordValue (..), at , Node (..), Relationship (..), URelationship (..), Path (..) ) where
+ src/Database/Bolt/Serialization.hs view
@@ -0,0 +1,7 @@+module Database.Bolt.Serialization+ ( BoltValue (..)+ , UnpackT+ , ToStructure (..), FromStructure (..)+ ) where++import Database.Bolt.Value.Type
+ src/Database/Bolt/Transaction.hs view
@@ -0,0 +1,31 @@+{-# LANGUAGE OverloadedStrings #-}+module Database.Bolt.Transaction+ ( transact+ ) where++import Control.Monad ( void )+import Control.Monad.IO.Class ( MonadIO(..) )+import Control.Monad.Except ( MonadError(..) )++import Database.Bolt.Connection ( BoltActionT+ , query'+ )++-- |Runs a sequence of actions as transaction. All queries would be rolled back+-- in case of any exception inside the block.+transact :: (MonadError e m, MonadIO m) => BoltActionT m a -> BoltActionT m a+transact actions = do+ txBegin+ let processErrors = flip catchError $ \e -> txRollback >> throwError e+ result <- processErrors actions+ txCommit+ pure result++txBegin :: MonadIO m => BoltActionT m ()+txBegin = void $ query' "BEGIN"++txCommit :: MonadIO m => BoltActionT m ()+txCommit = void $ query' "COMMIT"++txRollback :: MonadIO m => BoltActionT m ()+txRollback = void $ query' "ROLLBACK"
src/Database/Bolt/Value/Instances.hs view
@@ -1,5 +1,6 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-} module Database.Bolt.Value.Instances where @@ -8,7 +9,7 @@ import Control.Applicative (pure) import Control.Monad (forM, replicateM)-import Control.Monad.Trans.State (gets, modify)+import Control.Monad.State (gets, modify) import Data.Binary (Binary (..), decode, encode) import Data.Binary.IEEE754 (doubleToWord, wordToDouble) import Data.ByteString (ByteString, append, cons,@@ -106,9 +107,9 @@ instance BoltValue Structure where pack (Structure sig lst) | size < size4 = (structConst + fromIntegral size) `cons` pData- | size < size8 = struct8Code `cons` fromIntegral size `cons` pData- | size < size16 = struct16Code `cons` encodeStrict size `append` pData- | otherwise = error "Cannot pack so large structure"+ | size < size8 = struct8Code `cons` fromIntegral size `cons` pData+ | size < size16 = struct16Code `cons` encodeStrict size `append` pData+ | otherwise = error "Cannot pack so large structure" where size = fromIntegral $ length lst :: Word16 pData = sig `cons` B.concat (map pack lst)
src/Database/Bolt/Value/Type.hs view
@@ -1,6 +1,6 @@ module Database.Bolt.Value.Type where -import Control.Monad.Trans.State (StateT (..), evalStateT)+import Control.Monad.State (StateT (..), evalStateT) import Data.ByteString (ByteString) import Data.Map.Strict (Map) import Data.Text (Text)
test/Spec.hs view
@@ -12,6 +12,7 @@ import Test.QuickCheck import Database.Bolt+import Database.Bolt.Serialization main :: IO () main = hspec $ do