packages feed

monarch 0.8.0.0 → 0.8.1.1

raw patch · 5 files changed

+63/−19 lines, 5 filesdep +criterionPVP ok

version bump matches the API change (PVP)

Dependencies added: criterion

API changes (from Hackage documentation)

+ Database.Monarch: multiplePut :: (MonadBaseControl IO m, MonadIO m) => [(ByteString, ByteString)] -> MonarchT m ()

Files

Database/Monarch.hs view
@@ -11,7 +11,7 @@     , runMonarchPool     , ExtOption(..), RestoreOption(..), MiscOption(..)     , Code(..)-    , put, putKeep, putCat, putShiftLeft+    , put, putKeep, putCat, putShiftLeft, multiplePut     , putNoResponse     , out     , get, multipleGet
Database/Monarch/Binary.hs view
@@ -1,8 +1,9 @@ {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-} -- | TokyoTyrant Original Binary Protocol(<http://fallabs.com/tokyotyrant/spex.html#protocol>). module Database.Monarch.Binary     (-      put, putKeep, putCat, putShiftLeft+      put, putKeep, putCat, putShiftLeft, multiplePut     , putNoResponse     , out     , get, multipleGet@@ -21,7 +22,7 @@ import Data.Maybe import qualified Data.Binary as B import Data.Binary.Put (putWord32be, putByteString)-import Data.ByteString hiding (length, copy)+import Data.ByteString.Char8 hiding (length, copy, init, last) import Control.Applicative import Control.Monad import Control.Monad.Error@@ -47,6 +48,16 @@       response Success = return ()       response code = throwError code +-- | Store records.+--   If a record with the same key exists in the database,+--   it is overwritten.+multiplePut :: ( MonadBaseControl IO m+               , MonadIO m ) =>+               [(ByteString,ByteString)] -- ^ key & value pairs+            -> MonarchT m ()+multiplePut [] = return ()+multiplePut kvs = void $ misc "putlist" [] (kvs >>= \(k,v)->[k,v])+ -- | Store a new record. --   If a record with the same key exists in the database, --   this function has no effect.@@ -408,7 +419,9 @@       putOptions opts       putWord32be . fromIntegral $ length args       putByteString func-      mapM_ putByteString args+      mapM_ (\arg -> do+               putWord32be $ lengthBS32 arg+               putByteString arg) args     response Success = do       siz <- fromIntegral <$> parseWord32       replicateM siz parseBS
monarch.cabal view
@@ -1,5 +1,5 @@ name:                monarch-version:             0.8.0.0+version:             0.8.1.1 synopsis:            Monadic interface for TokyoTyrant. description:         This package provides simple monadic interface for TokyoTyrant. license:             BSD3@@ -66,7 +66,7 @@   build-depends:       base ==4.*                      , doctest ==0.8.* -test-suite benchmark+benchmark benchmark   if flag(develop)     buildable:         True   else@@ -86,3 +86,4 @@                      , tokyotyrant-haskell ==1.0.*                      , transformers ==0.3.*                      , transformers-base ==0.4.*+                     , criterion ==0.6.*
test/benchmark.hs view
@@ -1,27 +1,45 @@ {-# LANGUAGE OverloadedStrings #-}-import Database.Monarch-+import Criterion.Main+import qualified Database.Monarch as Monarch import qualified Database.TokyoTyrant.FFI as FFI-import Control.Monad import Data.ByteString.Char8 ()  main :: IO ()-main = monarch+main = defaultMain+       [ bgroup "TokyoTyrant (multiple put)"+         [ bench "monarch" $ nfIO mmonarch+         , bench "tokyotyrant-haskell" $ nfIO mffi+         ]+       , bgroup "TokyoTyrant (put)"+         [ bench "monarch" $ nfIO monarch+         , bench "tokyotyrant-haskell" $ nfIO ffi+         ]+       ] +size :: Int+size = 10000+ ffi :: IO () ffi = do   Right conn <- FFI.open "localhost" 1978-  forM_ [1..1000::Int] $ \_ -> do-    FFI.put conn "foo" "bar"-    FFI.get conn "foo"-    return ()+  FFI.put conn "foo" "bar"   FFI.close conn +mffi :: IO ()+mffi = do+  Right conn <- FFI.open "localhost" 1978+  FFI.mput conn $ replicate size ("foo", "bar")+  FFI.close conn+ monarch :: IO () monarch = do-  withMonarchConn "localhost" 1978 $ runMonarchConn $ do-         forM_ [1..1000::Int] $ \_ -> do-            put "foo" "bar"-            get "foo"-            return ()+  Right () <- Monarch.withMonarchConn "localhost" 1978 $+              Monarch.runMonarchConn $+              Monarch.put "foo" "bar"+  return ()++mmonarch :: IO ()+mmonarch = do+  Right () <- Monarch.withMonarchConn "localhost" 1978 $ Monarch.runMonarchConn $+         Monarch.multiplePut $ replicate size ("foo", "bar")   return ()
test/specs.hs view
@@ -13,6 +13,8 @@          describe "put" $ do            it "store a record" casePutRecord            it "overwrite a record if same key exists" casePutOverwriteRecord+         describe "mput" $ do+           it "store records" caseMputRecord          describe "putkeep" $ do            it "store a new record" casePutKeepNewRecord            it "has no effect if same key exists" casePutKeepNoEffect@@ -77,6 +79,16 @@         put "foo" "bar"         put "foo" "hoge"         get "foo"++caseMputRecord :: Assertion+caseMputRecord =+    action `returns` Right (Just "bob", Just "bar")+    where+      action = do+        multiplePut [("foo","bar"),("alice","bob")]+        bob <- get "alice"+        bar <- get "foo"+        return (bob, bar)  casePutKeepNewRecord :: Assertion casePutKeepNewRecord =