1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
import Control.Monad
import Database.TokyoCabinet.BDB
import qualified Database.TokyoCabinet.BDB.Cursor as C
main :: IO ()
main =
do bdb <- new
-- open the database
open bdb "casket.tcb" [OWRITER, OCREAT] >>= err bdb
-- store records
puts bdb [ ("foo", "hop"), ("bar", "step"), ("baz", "jump") ]
>>= err bdb . (all id)
-- retrieve records
get bdb "foo" >>= maybe (error "something goes wrong") putStrLn
-- traverse records
cur <- C.new bdb
C.first cur >>= err bdb
iter cur >>= putStrLn . show
-- close the database
close bdb >>= err bdb
where
puts :: BDB -> [(String, String)] -> IO [Bool]
puts bdb = mapM (uncurry $ put bdb)
err :: BDB -> Bool -> IO ()
err bdb = flip unless $ ecode bdb >>= error . show
iter :: C.BDBCUR -> IO [(String, String)]
iter cur = do
[key, value] <- sequence [C.key cur, C.val cur]
case (key, value) of
(Just k, Just v) -> C.next cur >> iter cur >>= return . ((k,v):)
_ -> return []
|