packages feed

HandlerSocketClient 0.0.3 → 0.0.4

raw patch · 3 files changed

+34/−9 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Database.HandlerSocketClient: runReqFindN :: Integral a => HandSock -> String -> [String] -> a -> IO [[[String]]]

Files

Database/HandlerSocketClient.hs view
@@ -23,6 +23,7 @@   -- * Do Special Request   runReqOpen,   runReqFind,+  runReqFindN,   runReqInsert,   runReqUpdate,   runReqDelete@@ -54,7 +55,20 @@       if B.elem 10 s1         then return s1         else fmap (B.append s1) $ recvOneR sock maxlen+recvN :: Socket -> Int -> Int -> IO [B.ByteString]+recvN sock maxlen count = do+  all <- recvNR sock maxlen count+  return $ init $ B.split 10 all +recvNR :: Socket -> Int -> Int -> IO B.ByteString+recvNR sock maxlen todo+  | todo <= 0 = return B.empty+  | otherwise = do+      s1 <- recv sock maxlen+      if B.null s1+        then return s1+        else fmap (B.append s1) $ recvNR sock maxlen $ todo - (B.count 10 s1)+ escapeW :: [Word8] -> [Word8] escapeW [] = [] escapeW (x:xs) = if x < 16 then 1:(0x40+x):(escapeW xs) else x:(escapeW xs)@@ -137,20 +151,29 @@ runReqOpen :: HandSock -> String -> String -> String -> String -> IO Bool runReqOpen hs db tb ind cs = runReqBool hs $ makeReqOpen db tb ind cs +mygroup :: Int -> [a] -> [[a]]+mygroup _ [] = []+mygroup i xs = l:(mygroup i r) +  where (l,r) = splitAt i xs++splitFindResult :: [String] -> [[String]]+splitFindResult ss =+  case ss of+    ("0":i:xs) -> mygroup (read i) xs+    _ -> []+     -- | Do \'find\' request. Returns at most lim results. runReqFind :: (Integral a) => HandSock -> String -> String -> a -> IO [[String]] runReqFind hs op v lim = do   let req = makeReqFind op v lim   sendAll (getSocket hs) req-  resp <- fmap decodeResp $ recvOne (getSocket hs) 4096-  case resp of-    (o:i:xs) -> return $ mygroup (read i :: Int) xs-    _ -> return []-  where-    mygroup _ [] = []-    mygroup i xs = l:(mygroup i r) -      where (l,r) = splitAt i xs+  fmap (splitFindResult . decodeResp) $ recvOne (getSocket hs) 4096 +runReqFindN :: (Integral a) => HandSock -> String -> [String] -> a -> IO [[[String]]]+runReqFindN hs op vs lim = do+  mapM_ (\v -> let req = makeReqFind op v lim in sendAll (getSocket hs) req) vs+  map (splitFindResult . decodeResp) `fmap` recvN (getSocket hs) 4096 (length vs)+   -- | Do \'insert\' request, insert one record at a time. runReqInsert :: HandSock -> [String] -> IO Bool runReqInsert hs vs = runReqBool hs $ makeReqInsert vs
HandlerSocketClient.cabal view
@@ -1,5 +1,5 @@ Name:              HandlerSocketClient-Version:           0.0.3+Version:           0.0.4 Synopsis:          Haskell implementation of a HandlerSocket client (API). Description:       This package implemets API for a HandlerSocket client. homepage:          https://github.com/wuxb45/HandlerSocket-Haskell-Client
README view
@@ -30,5 +30,7 @@   putStrLn $ show r5   r6 <- runReqGeneric hs ["0","+","2","555","999"]   putStrLn $ show r6+  r7 <- runReqFindN hs "=" ["1","2","3","4"] 1+  putStrLn $ show r7