Interface to Hash based DBM. See also, http://tokyocabinet.sourceforge.net/spex-en.html#tchdbapi for details
- data HDB
- data ECODE
- data OpenMode
- data TuningOption
- new :: IO HDB
- delete :: HDB -> IO ()
- ecode :: HDB -> IO ECODE
- errmsg :: ECODE -> String
- tune :: HDB -> Int64 -> Int8 -> Int8 -> [TuningOption] -> IO Bool
- setcache :: HDB -> Int32 -> IO Bool
- setxmsiz :: HDB -> Int64 -> IO Bool
- open :: HDB -> String -> [OpenMode] -> IO Bool
- close :: HDB -> IO Bool
- put :: (Storable k, Storable v) => HDB -> k -> v -> IO Bool
- putkeep :: (Storable k, Storable v) => HDB -> k -> v -> IO Bool
- putcat :: (Storable k, Storable v) => HDB -> k -> v -> IO Bool
- putasync :: (Storable k, Storable v) => HDB -> k -> v -> IO Bool
- out :: Storable k => HDB -> k -> IO Bool
- get :: (Storable k, Storable v) => HDB -> k -> IO (Maybe v)
- vsiz :: Storable k => HDB -> k -> IO (Maybe Int)
- iterinit :: HDB -> IO Bool
- iternext :: Storable k => HDB -> IO (Maybe k)
- fwmkeys :: (Storable k1, Storable k2, Sequence q) => HDB -> k1 -> Int -> IO (q k2)
- addint :: Storable k => HDB -> k -> Int -> IO (Maybe Int)
- adddouble :: Storable k => HDB -> k -> Double -> IO (Maybe Double)
- sync :: HDB -> IO Bool
- optimize :: HDB -> Int64 -> Int8 -> Int8 -> [TuningOption] -> IO Bool
- vanish :: HDB -> IO Bool
- copy :: HDB -> String -> IO Bool
- tranbegin :: HDB -> IO Bool
- trancommit :: HDB -> IO Bool
- tranabort :: HDB -> IO Bool
- path :: HDB -> IO (Maybe String)
- rnum :: HDB -> IO Word64
- fsiz :: HDB -> IO Word64
Documentation
Example
import Control.Monad import Database.TokyoCabinet.HDB
main = do hdb <- new -- open the database open hdb "casket.tch" [OWRITER, OCREAT] >>= err hdb -- store records puts hdb [("foo", "hop"), ("bar", "step"), ("baz", "jump")] >>= err hdb . (all id) -- retrieve records get_print hdb "foo" -- traverse records iterinit hdb iter hdb >>= mapM_ (k -> putStr (k++":") >> get_print hdb k) -- close the database close hdb >>= err hdb where puts :: HDB -> [(String, String)] -> IO [Bool] puts hdb = mapM (uncurry $ put hdb)
get_print :: HDB -> String -> IO () get_print hdb key = get hdb key >>= maybe (error "something goes wrong") putStrLn
err :: HDB -> Bool -> IO () err hdb = flip unless $ ecode hdb >>= error . show
iter :: HDB -> IO [String] iter hdb = iternext hdb >>= maybe (return []) (x -> return . (x:) =<< iter hdb)
Represents error
ESUCCESS | success |
ETHREAD | threading error |
EINVALID | invalid operation |
ENOFILE | file not found |
ENOPERM | no permission |
EMETA | invalid meta data |
ERHEAD | invalid record header |
EOPEN | open error |
ECLOSE | close error |
ETRUNC | trunc error |
ESYNC | sync error |
ESTAT | stat error |
ESEEK | seek error |
EREAD | read error |
EWRITE | write error |
EMMAP | mmap error |
ELOCK | lock error |
EUNLINK | unlink error |
ERENAME | rename error |
EMKDIR | mkdir error |
ERMDIR | rmdir error |
EKEEP | existing record |
ENOREC | no record found |
EMISC | miscellaneous error |
data TuningOption Source
Basic API (tokyocabinet.idl compliant)
Free HDB resource forcibly. HDB is kept by ForeignPtr, so Haskell runtime GC cleans up memory for almost situation. Most always, you don't need to call this. After call this, you must not touch HDB object. Its behavior is undefined.
:: HDB | HDB object |
-> Int64 | the number of elements of the bucket array. |
-> Int8 | the size of record alignment by power of 2. |
-> Int8 | the maximum number of elements of the free block pool by power of 2. |
-> [TuningOption] | tuning options. |
-> IO Bool | if successful, the return value is True. |
Set the tuning parameters.
:: HDB | HDB object. |
-> Int32 | the maximum number of records to be cached. |
-> IO Bool | if successful, the return value is True. |
Set the caching parameters.
putkeep :: (Storable k, Storable v) => HDB -> k -> v -> IO BoolSource
Store a new record. If a record with the same key exists in the database, this function has no effect.
putcat :: (Storable k, Storable v) => HDB -> k -> v -> IO BoolSource
Concatenate a value at the end of the existing record.
putasync :: (Storable k, Storable v) => HDB -> k -> v -> IO BoolSource
Store a record into a hash database object in asynchronous fashion.
iternext :: Storable k => HDB -> IO (Maybe k)Source
Return the next key of the iterator of a HDB object.
fwmkeys :: (Storable k1, Storable k2, Sequence q) => HDB -> k1 -> Int -> IO (q k2)Source
Return list of forward matched keys.
addint :: Storable k => HDB -> k -> Int -> IO (Maybe Int)Source
Increment the corresponding value. (The value specified by a key is treated as integer.)
adddouble :: Storable k => HDB -> k -> Double -> IO (Maybe Double)Source
Increment the corresponding value. (The value specified by a key is treated as double.)
Synchronize updated contents of a database object with the file and the device.
:: HDB | HDB object |
-> Int64 | the number of elements of the bucket array. |
-> Int8 | the size of record alignment by power of 2. |
-> Int8 | the maximum number of elements of the free block pool by power of 2. |
-> [TuningOption] | tuning options. |
-> IO Bool | if successful, the return value is True. |
Optimize the file of a Hash database object.
trancommit :: HDB -> IO BoolSource
Commit the transaction.