packages feed

hedis 0.10.10 → 0.11.0

raw patch · 6 files changed

+47/−24 lines, 6 filesdep ~networkPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: network

API changes (from Hackage documentation)

- Database.Redis: PortNumber :: PortNumber -> PortID
- Database.Redis: Service :: String -> PortID
- Database.Redis: UnixSocket :: String -> PortID
- Database.Redis: data PortID
+ Database.Redis: type PortNumber = PortNumber
- Database.Redis: ConnInfo :: HostName -> PortID -> Maybe ByteString -> Integer -> Int -> NominalDiffTime -> Maybe NominalDiffTime -> Maybe ClientParams -> ConnectInfo
+ Database.Redis: ConnInfo :: HostName -> PortNumber -> Maybe ByteString -> Integer -> Int -> NominalDiffTime -> Maybe NominalDiffTime -> Maybe ClientParams -> ConnectInfo
- Database.Redis: [connectPort] :: ConnectInfo -> PortID
+ Database.Redis: [connectPort] :: ConnectInfo -> PortNumber
- Database.Redis: type HostName = String
+ Database.Redis: type HostName = HostName

Files

CHANGELOG view
@@ -1,5 +1,9 @@ # Changelog for Hedis +## 0.11.0++* PR #126. Fixes for network 2.8 and 3.0+ ## 0.10.10  * Only disable warnings for GHC 8.6, fix build
hedis.cabal view
@@ -1,5 +1,5 @@ name:               hedis-version:            0.10.10+version:            0.11.0 synopsis:     Client library for the Redis datastore: supports full command set,     pipelining.
src/Database/Redis.hs view
@@ -164,7 +164,7 @@     -- * Connection     Connection, ConnectError(..), connect, checkedConnect, disconnect,      ConnectInfo(..), defaultConnectInfo, parseConnectInfo,-    HostName, PortID(..),+    HostName, PortNumber,          -- * Commands     module Database.Redis.Commands,@@ -195,7 +195,7 @@ import Database.Redis.PubSub import Database.Redis.Protocol import Database.Redis.ProtocolPipelining-    (HostName, PortID(..), ConnectionLostException(..))+    (HostName, PortNumber, ConnectionLostException(..)) import Database.Redis.Transactions import Database.Redis.Types import Database.Redis.URL
src/Database/Redis/Core.hs view
@@ -23,7 +23,7 @@ import Data.Pool import Data.Time import Data.Typeable-import Network+import qualified Network.Socket as NS import Network.TLS (ClientParams)  import Database.Redis.Protocol@@ -155,8 +155,8 @@ -- @ -- data ConnectInfo = ConnInfo-    { connectHost           :: HostName-    , connectPort           :: PortID+    { connectHost           :: NS.HostName+    , connectPort           :: NS.PortNumber     , connectAuth           :: Maybe B.ByteString     -- ^ When the server is protected by a password, set 'connectAuth' to 'Just'     --   the password. Each connection will then authenticate by the 'auth'@@ -201,7 +201,7 @@ defaultConnectInfo :: ConnectInfo defaultConnectInfo = ConnInfo     { connectHost           = "localhost"-    , connectPort           = PortNumber 6379+    , connectPort           = 6379     , connectAuth           = Nothing     , connectDatabase       = 0     , connectMaxConnections = 50
src/Database/Redis/ProtocolPipelining.hs view
@@ -17,7 +17,7 @@   Connection,   connect, enableTLS, beginReceiving, disconnect, request, send, recv, flush,   ConnectionLostException(..),-  HostName, PortID(..)+  HostName, PortNumber ) where  import           Prelude@@ -31,8 +31,6 @@ import qualified Data.ByteString.Lazy as L import           Data.IORef import           Data.Typeable-import           Network-import qualified Network.BSD as BSD import qualified Network.Socket as NS import qualified Network.TLS as TLS import           System.IO@@ -41,6 +39,9 @@  import           Database.Redis.Protocol +type HostName = NS.HostName+type PortNumber = NS.PortNumber+ data ConnectionContext = NormalHandle Handle | TLSContext TLS.Context  data Connection = Conn@@ -71,8 +72,30 @@  instance Exception ConnectTimeout -connect :: HostName -> PortID -> Maybe Int -> IO Connection-connect hostName portID timeoutOpt =+getHostAddrInfo :: NS.HostName -> NS.PortNumber -> IO [NS.AddrInfo]+getHostAddrInfo hostname port = do+  addresses <- NS.getAddrInfo+    (Just NS.defaultHints)+    (Just hostname)+    (Just (show port))+  return addresses++connectSocket :: [NS.AddrInfo] -> IO NS.Socket+connectSocket addresses = do+  let addrInfo = head addresses+  socket <- NS.socket (NS.addrFamily addrInfo) NS.Stream NS.defaultProtocol+  catch+    (do+      _ <- NS.connect socket (NS.addrAddress addrInfo)+      return socket)+    (\(SomeException e) -> do+      _ <- NS.close socket+      case (tail addresses) of+        [] -> throwIO e+        others -> connectSocket others)++connect :: NS.HostName -> NS.PortNumber -> Maybe Int -> IO Connection+connect hostName portNumber timeoutOpt =   bracketOnError hConnect hClose $ \h -> do     hSetBinaryMode h True     connReplies <- newIORef []@@ -83,7 +106,7 @@   where         hConnect = do           phaseMVar <- newMVar PhaseUnknown-          let doConnect = hConnect' portID phaseMVar+          let doConnect = hConnect' phaseMVar           case timeoutOpt of             Nothing -> doConnect             Just micros -> do@@ -93,16 +116,14 @@                 Right () -> do                   phase <- readMVar phaseMVar                   errConnectTimeout phase-        hConnect' (PortNumber port) mvar =-          bracketOnError mkSocket NS.close $ \sock -> do+        hConnect' mvar =+          do+            addrInfo <- getHostAddrInfo hostName portNumber+            sock <- connectSocket addrInfo             NS.setSocketOption sock NS.KeepAlive 1             void $ swapMVar mvar PhaseResolve-            host <- BSD.getHostByName hostName             void $ swapMVar mvar PhaseOpenSocket-            NS.connect sock $ NS.SockAddrInet port (BSD.hostAddress host)             NS.socketToHandle sock ReadWriteMode-        hConnect' _ _ = connectTo hostName portID-        mkSocket   = NS.socket NS.AF_INET NS.Stream 0  enableTLS :: TLS.ClientParams -> Connection -> IO Connection enableTLS tlsParams conn@Conn{..} = do
src/Database/Redis/URL.hs view
@@ -10,7 +10,6 @@ import Control.Monad (guard) import Data.Monoid ((<>)) import Database.Redis.Core (ConnectInfo(..), defaultConnectInfo)-import Database.Redis.ProtocolPipelining (PortID(..)) import Network.HTTP.Base import Network.URI (parseURI, uriPath, uriScheme) import Text.Read (readMaybe)@@ -22,7 +21,7 @@ -- Username is ignored, path is used to specify the database: -- -- >>> parseConnectInfo "redis://username:password@host:42/2"--- Right (ConnInfo {connectHost = "host", connectPort = PortNumber 42, connectAuth = Just "password", connectDatabase = 2, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing})+-- Right (ConnInfo {connectHost = "host", connectPort = 42, connectAuth = Just "password", connectDatabase = 2, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing}) -- -- >>> parseConnectInfo "redis://username:password@host:42/db" -- Left "Invalid port: db"@@ -36,7 +35,7 @@ -- @'defaultConnectInfo'@: -- -- >>> parseConnectInfo "redis://"--- Right (ConnInfo {connectHost = "localhost", connectPort = PortNumber 6379, connectAuth = Nothing, connectDatabase = 0, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing})+-- Right (ConnInfo {connectHost = "localhost", connectPort = 6379, connectAuth = Nothing, connectDatabase = 0, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing}) -- parseConnectInfo :: String -> Either String ConnectInfo parseConnectInfo url = do@@ -57,8 +56,7 @@         { connectHost = if null h             then connectHost defaultConnectInfo             else h-        , connectPort = maybe (connectPort defaultConnectInfo)-            (PortNumber . fromIntegral) $ port uriAuth+        , connectPort = maybe (connectPort defaultConnectInfo) fromIntegral (port uriAuth)         , connectAuth = C8.pack <$> password uriAuth         , connectDatabase = db         }