hasbolt 0.1.2.0 → 0.1.2.1
raw patch · 6 files changed
+63/−13 lines, 6 filesdep −network-simpledep ~basedep ~hasboltPVP ok
version bump matches the API change (PVP)
Dependencies removed: network-simple
Dependency ranges changed: base, hasbolt
API changes (from Hackage documentation)
Files
- hasbolt.cabal +3/−3
- src/Database/Bolt.hs +2/−0
- src/Database/Bolt/Connection.hs +2/−2
- src/Database/Bolt/Connection/Pipe.hs +4/−3
- src/Database/Bolt/Connection/Socket.hs +46/−0
- src/Database/Bolt/Connection/Type.hs +6/−5
hasbolt.cabal view
@@ -1,5 +1,5 @@ name: hasbolt-version: 0.1.2.0+version: 0.1.2.1 cabal-version: >=1.10 build-type: Simple license: BSD3@@ -42,7 +42,6 @@ data-binary-ieee754 >=0.4.4 && <0.5, transformers >=0.5.2.0 && <0.6, network >=2.6.3.1 && <2.7,- network-simple >=0.4.0.5 && <0.5, data-default >=0.7.1.1 && <0.8, hex >=0.1.2 && <0.2 default-language: Haskell2010@@ -52,6 +51,7 @@ Database.Bolt.Value.Helpers Database.Bolt.Value.Instances Database.Bolt.Value.Structure+ Database.Bolt.Connection.Socket Database.Bolt.Connection.Type Database.Bolt.Connection.Instances Database.Bolt.Connection.Pipe@@ -64,7 +64,7 @@ main-is: Spec.hs build-depends: base >=4.8 && <5,- hasbolt >=0.1.2.0 && <0.2,+ hasbolt >=0.1.2.1 && <0.2, hspec >=2.4.1 && <2.5, QuickCheck >=2.9 && <2.11, hex >=0.1.2 && <0.2,
src/Database/Bolt.hs view
@@ -20,8 +20,10 @@ import Data.Map.Strict (Map) import Control.Monad.IO.Class (MonadIO) +-- |Runs Cypher query and returns list of obtained 'Record's. Strict version query :: MonadIO m => Text -> BoltActionT m [Record] query = query' +-- |Runs Cypher query with parameters and returns list of obtained 'Record's. Strict version queryP :: MonadIO m => Text -> Map Text Value -> BoltActionT m [Record] queryP = queryP'
src/Database/Bolt/Connection.hs view
@@ -26,11 +26,11 @@ run :: Pipe -> BoltActionT m a -> m a run = flip runReaderT --- |Runs Cypher query with parameters and returns list of obtained 'Record's+-- |Runs Cypher query with parameters and returns list of obtained 'Record's. Lazy version queryP :: MonadIO m => Text -> Map Text Value -> BoltActionT m [Record] queryP = querySL False --- |Runs Cypher query and returns list of obtained 'Record's+-- |Runs Cypher query and returns list of obtained 'Record's. Lazy version query :: MonadIO m => Text -> BoltActionT m [Record] query cypher = queryP cypher empty
src/Database/Bolt/Connection/Pipe.hs view
@@ -5,15 +5,16 @@ import Database.Bolt.Value.Instances import Database.Bolt.Value.Type +import Database.Bolt.Connection.Socket (Socket, closeSock,+ connectSock, recv, send,+ sendMany)+ import Control.Monad (forM_, unless, void, when) import Control.Monad.IO.Class (MonadIO (..)) import Data.ByteString (ByteString) import qualified Data.ByteString as B (concat, length, null, splitAt) import Data.Word (Word16)-import Network.Simple.TCP (Socket, closeSock,- connectSock, recv, send,- sendMany) -- |Creates new 'Pipe' instance to use all requests through connect :: MonadIO m => BoltCfg -> m Pipe
+ src/Database/Bolt/Connection/Socket.hs view
@@ -0,0 +1,46 @@+module Database.Bolt.Connection.Socket+ ( Socket+ , connectSock, closeSock+ , recv, send, sendMany+ ) where++import Control.Exception (bracketOnError)+import Control.Monad.IO.Class (MonadIO (..))+import Data.ByteString (ByteString, null)+import Network.Socket (AddrInfoFlag (..), HostName,+ ServiceName, SockAddr, Socket,+ SocketType (..), addrAddress,+ addrFamily, addrFlags, addrProtocol,+ addrSocketType, defaultHints,+ getAddrInfo, socket, close, connect)+import qualified Network.Socket.ByteString as NSB (recv, sendAll, sendMany)+import Prelude hiding (null)++connectSock :: MonadIO m => HostName -> ServiceName -> m (Socket, SockAddr)+connectSock host port = liftIO $ bracketOnError (createSock host port) (closeSock . fst) $+ \(sock, addr) -> liftIO (connect sock addr) >> pure (sock, addr)++createSock :: MonadIO m => HostName -> ServiceName -> m (Socket, SockAddr)+createSock host port = liftIO $ do (addr:_) <- getAddrInfo (Just hints) (Just host) (Just port)+ let family' = addrFamily addr+ let type' = addrSocketType addr+ let protocol' = addrProtocol addr+ sock <- socket family' type' protocol'+ pure (sock, addrAddress addr)+ where hints = defaultHints { addrFlags = [AI_ADDRCONFIG]+ , addrSocketType = Stream+ }++closeSock :: MonadIO m => Socket -> m ()+closeSock = liftIO . close++recv :: MonadIO m => Socket -> Int -> m (Maybe ByteString)+recv sock nbytes = liftIO $ do bs <- NSB.recv sock nbytes+ if null bs then pure Nothing+ else pure (Just bs)++send :: MonadIO m => Socket -> ByteString -> m ()+send sock = liftIO . NSB.sendAll sock++sendMany :: MonadIO m => Socket -> [ByteString] -> m ()+sendMany sock = liftIO . NSB.sendMany sock
src/Database/Bolt/Connection/Type.hs view
@@ -4,11 +4,12 @@ import Database.Bolt.Value.Type -import Data.Default (Default (..))-import Data.Map.Strict (Map)-import Data.Text (Text)-import Data.Word (Word16, Word32)-import Network.Simple.TCP (Socket)+import Database.Bolt.Connection.Socket (Socket)++import Data.Default (Default (..))+import Data.Map.Strict (Map)+import Data.Text (Text)+import Data.Word (Word16, Word32) -- |Configuration of driver connection data BoltCfg = BoltCfg { magic :: Word32 -- ^'6060B017' value