hedis 0.3.2 → 0.4
raw patch · 5 files changed
+59/−32 lines, 5 filesdep ~bytestring-lexingdep ~stmPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: bytestring-lexing, stm
API changes (from Hackage documentation)
- Database.Redis: brpoplpush :: ByteString -> ByteString -> Integer -> Redis (Either Reply ByteString)
+ Database.Redis: brpoplpush :: ByteString -> ByteString -> Integer -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: lindex :: ByteString -> Integer -> Redis (Either Reply ByteString)
+ Database.Redis: lindex :: ByteString -> Integer -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: lpop :: ByteString -> Redis (Either Reply ByteString)
+ Database.Redis: lpop :: ByteString -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: objectEncoding :: ByteString -> Redis (Either Reply ByteString)
+ Database.Redis: objectEncoding :: ByteString -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: randomkey :: Redis (Either Reply ByteString)
+ Database.Redis: randomkey :: Redis (Either Reply (Maybe ByteString))
- Database.Redis: rpop :: ByteString -> Redis (Either Reply ByteString)
+ Database.Redis: rpop :: ByteString -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: rpoplpush :: ByteString -> ByteString -> Redis (Either Reply ByteString)
+ Database.Redis: rpoplpush :: ByteString -> ByteString -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: spop :: ByteString -> Redis (Either Reply ByteString)
+ Database.Redis: spop :: ByteString -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: srandmember :: ByteString -> Redis (Either Reply ByteString)
+ Database.Redis: srandmember :: ByteString -> Redis (Either Reply (Maybe ByteString))
- Database.Redis: zrank :: ByteString -> ByteString -> Redis (Either Reply Integer)
+ Database.Redis: zrank :: ByteString -> ByteString -> Redis (Either Reply (Maybe Integer))
- Database.Redis: zrevrank :: ByteString -> ByteString -> Redis (Either Reply Integer)
+ Database.Redis: zrevrank :: ByteString -> ByteString -> Redis (Either Reply (Maybe Integer))
- Database.Redis: zscore :: ByteString -> ByteString -> Redis (Either Reply Double)
+ Database.Redis: zscore :: ByteString -> ByteString -> Redis (Either Reply (Maybe Double))
Files
- hedis.cabal +13/−3
- src/Database/Redis.hs +1/−1
- src/Database/Redis/Commands.hs +12/−12
- src/Database/Redis/ManualCommands.hs +14/−1
- test/Test.hs +19/−15
hedis.cabal view
@@ -1,5 +1,5 @@ name: hedis-version: 0.3.2+version: 0.4 synopsis: Client library for the Redis datastore: supports full command set, pipelining.@@ -33,6 +33,16 @@ TCP connection. . For detailed documentation, see the "Database.Redis" module.+ .+ [Changes since version 0.3.2]+ .+ * Some commands got a 'Maybe' added to their return type, to properly handle+ Redis returning @nil@-replies.+ .+ * Updated dependencies on @bytestring-lexing@ and @stm@.+ .+ * Minor improvements and fixes to the documentation.+ . license: BSD3 license-file: LICENSE author: Falko Peters@@ -67,11 +77,11 @@ build-depends: attoparsec == 0.10.*, base == 4.*, bytestring == 0.9.*,- bytestring-lexing == 0.3.*,+ bytestring-lexing == 0.4.*, mtl == 2.*, network == 2.*, resource-pool == 0.2.1.*,- stm == 2.2.*,+ stm == 2.3.*, time other-modules: Database.Redis.Core,
src/Database/Redis.hs view
@@ -72,7 +72,7 @@ -- @ -- -- |Redis DEBUG OBJECT command -- debugObject :: ByteString -> 'Redis' (Either 'Reply' ByteString)- -- debugObject key = 'sendRequest' [\"DEBUG\", \"OBJECT\", 'encode' key]+ -- debugObject key = 'sendRequest' [\"DEBUG\", \"OBJECT\", key] -- @ -- Reply(..),Status(..),RedisResult(..),ConnectionLostException(..),
src/Database/Redis/Commands.hs view
@@ -157,7 +157,7 @@ exec, -- |Execute all commands issued after MULTI (<http://redis.io/commands/exec>). multi, -- |Mark the start of a transaction block (<http://redis.io/commands/multi>). unwatch, -- |Forget about all watched keys (<http://redis.io/commands/unwatch>).-watch, -- |Watch the given keys to determine execution of the MULTI/EXEC block (<http://redis.io/commands/watch>).+watch, -- |Watch the given keys to determine execution of the MULTI\/EXEC block (<http://redis.io/commands/watch>). -- * Unimplemented Commands -- |These commands are not implemented, as of now. Library@@ -211,14 +211,14 @@ zrevrank :: ByteString -- ^ key -> ByteString -- ^ member- -> Redis (Either Reply Integer)+ -> Redis (Either Reply (Maybe Integer)) zrevrank key member = sendRequest (["ZREVRANK"] ++ [encode key] ++ [encode member] ) brpoplpush :: ByteString -- ^ source -> ByteString -- ^ destination -> Integer -- ^ timeout- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) brpoplpush source destination timeout = sendRequest (["BRPOPLPUSH"] ++ [encode source] ++ [encode destination] ++ [encode timeout] ) incrby@@ -229,7 +229,7 @@ rpop :: ByteString -- ^ key- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) rpop key = sendRequest (["RPOP"] ++ [encode key] ) setrange@@ -358,7 +358,7 @@ rpoplpush :: ByteString -- ^ source -> ByteString -- ^ destination- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) rpoplpush source destination = sendRequest (["RPOPLPUSH"] ++ [encode source] ++ [encode destination] ) hlen@@ -396,7 +396,7 @@ lpop :: ByteString -- ^ key- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) lpop key = sendRequest (["LPOP"] ++ [encode key] ) hmget@@ -489,7 +489,7 @@ zrank :: ByteString -- ^ key -> ByteString -- ^ member- -> Redis (Either Reply Integer)+ -> Redis (Either Reply (Maybe Integer)) zrank key member = sendRequest (["ZRANK"] ++ [encode key] ++ [encode member] ) zremrangebyscore@@ -516,12 +516,12 @@ rpush key value = sendRequest (["RPUSH"] ++ [encode key] ++ map encode value ) randomkey- :: Redis (Either Reply ByteString)+ :: Redis (Either Reply (Maybe ByteString)) randomkey = sendRequest (["RANDOMKEY"] ) spop :: ByteString -- ^ key- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) spop key = sendRequest (["SPOP"] ++ [encode key] ) hsetnx@@ -712,13 +712,13 @@ lindex :: ByteString -- ^ key -> Integer -- ^ index- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) lindex key index = sendRequest (["LINDEX"] ++ [encode key] ++ [encode index] ) zscore :: ByteString -- ^ key -> ByteString -- ^ member- -> Redis (Either Reply Double)+ -> Redis (Either Reply (Maybe Double)) zscore key member = sendRequest (["ZSCORE"] ++ [encode key] ++ [encode member] ) strlen@@ -753,7 +753,7 @@ srandmember :: ByteString -- ^ key- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) srandmember key = sendRequest (["SRANDMEMBER"] ++ [encode key] ) persist
src/Database/Redis/ManualCommands.hs view
@@ -21,7 +21,7 @@ objectEncoding :: ByteString -- ^ key- -> Redis (Either Reply ByteString)+ -> Redis (Either Reply (Maybe ByteString)) objectEncoding key = sendRequest ["OBJECT", "encoding", encode key] linsertBefore@@ -167,6 +167,7 @@ sendRequest ["ZREVRANGEBYSCORE", encode key, encode min, encode max ,"WITHSCORES","LIMIT", encode offset, encode count] +-- |Options for the 'sort' command. data SortOpts = SortOpts { sortBy :: Maybe ByteString , sortLimit :: (Integer,Integer)@@ -175,6 +176,18 @@ , sortAlpha :: Bool } deriving (Show, Eq) +-- |Redis default 'SortOpts'. Equivalent to omitting all optional parameters.+--+-- @+-- SortOpts+-- { sortBy = Nothing -- omit the BY option+-- , sortLimit = (0,-1) -- return entire collection+-- , sortGet = [] -- omit the GET option+-- , sortOrder = Asc -- sort in ascending order+-- , sortAlpha = False -- sort numerically, not lexicographically+-- }+-- @+-- defaultSortOpts :: SortOpts defaultSortOpts = SortOpts { sortBy = Nothing
test/Test.hs view
@@ -158,7 +158,7 @@ testRandomkey = testCase "randomkey" $ do set "k1" "value" >>=? Ok set "k2" "value" >>=? Ok- Right k <- randomkey+ Right (Just k) <- randomkey assert $ k `elem` ["k1", "k2"] testRename :: Test@@ -190,8 +190,8 @@ let opts = defaultSortOpts { sortOrder = Desc, sortAlpha = True , sortLimit = (1,2) , sortBy = Just "weight_*"- , sortGet = ["object_*"] }- sort "ids" opts >>=? ["bar","foo"]+ , sortGet = ["#", "object_*"] }+ sort "ids" opts >>=? ["2", "bar", "1", "foo"] testTtl :: Test@@ -414,18 +414,21 @@ testBrpoplpush :: Test testBrpoplpush = testCase "brpoplpush/rpoplpush" $ do- rpush "k1" ["v1","v2"] >>=? 2- brpoplpush "k1" "k2" 1 >>=? "v2"- rpoplpush "k1" "k2" >>=? "v1"- llen "k2" >>=? 2- llen "k1" >>=? 0+ rpush "k1" ["v1","v2"] >>=? 2+ brpoplpush "k1" "k2" 1 >>=? Just "v2"+ rpoplpush "k1" "k2" >>=? Just "v1"+ rpoplpush "notAKey" "k2" >>=? Nothing+ llen "k2" >>=? 2+ llen "k1" >>=? 0+ -- run into timeout+ brpoplpush "notAKey" "k2" 1 >>=? Nothing testLpop :: Test testLpop = testCase "lpop/rpop" $ do lpush "key" ["v3","v2","v1"] >>=? 3- lpop "key" >>=? "v1"+ lpop "key" >>=? Just "v1" llen "key" >>=? 2- rpop "key" >>=? "v3"+ rpop "key" >>=? Just "v3" testLinsert :: Test testLinsert = testCase "linsert" $ do@@ -434,8 +437,8 @@ linsertBefore "key" "notAVal" "v3" >>=? (-1) linsertAfter "key" "v2" "v3" >>=? 3 linsertAfter "key" "notAVal" "v3" >>=? (-1)- lindex "key" 0 >>=? "v1"- lindex "key" 2 >>=? "v3"+ lindex "key" 0 >>=? Just "v1"+ lindex "key" 2 >>=? Just "v3" testLpushx :: Test testLpushx = testCase "lpushx/rpushx" $ do@@ -466,7 +469,7 @@ testZAdd :: Test testZAdd = testCase "zadd/zrem/zcard/zscore/zincrby" $ do zadd "key" [(1,"v1"),(2,"v2"),(40,"v3")] >>=? 3- zscore "key" "v3" >>=? 40+ zscore "key" "v3" >>=? Just 40 zincrby "key" 2 "v3" >>=? 42 zrem "key" ["v3","notAKey"] >>=? 1 zcard "key" >>=? 2@@ -474,8 +477,9 @@ testZRank :: Test testZRank = testCase "zrank/zrevrank/zcount" $ do zadd "key" [(1,"v1"),(2,"v2"),(40,"v3")] >>=? 3- zrank "key" "v1" >>=? 0- zrevrank "key" "v1" >>=? 2+ zrank "notAKey" "v1" >>=? Nothing+ zrank "key" "v1" >>=? Just 0+ zrevrank "key" "v1" >>=? Just 2 zcount "key" 10 100 >>=? 1 testZRemRange :: Test