{-# LANGUAGE CPP #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE ForeignFunctionInterface #-} -- | -- Module : Database.RocksDB.C -- Copyright : (c) 2012-2020 The rocksdb-haskell Authors -- License : BSD3 -- Maintainer : jprupp@protonmail.ch -- Stability : experimental -- Portability : non-portable -- module Database.RocksDB.C ( RocksDB , Options , ReadOpts , WriteOpts , ColumnFamily , PrefixExtract , Snapshot , Iterator , WriteBatch , BloomFilter , ErrPtr , DBName , CFName , Key , Val , c_rocksdb_open , c_rocksdb_open_column_families , c_rocksdb_close , c_rocksdb_create_column_family , c_rocksdb_drop_column_family , c_rocksdb_column_family_handle_destroy , c_rocksdb_put , c_rocksdb_put_cf , c_rocksdb_delete , c_rocksdb_delete_cf , c_rocksdb_write , c_rocksdb_get , c_rocksdb_get_cf , c_rocksdb_multi_get , c_rocksdb_multi_get_cf , c_rocksdb_create_snapshot , c_rocksdb_release_snapshot , c_rocksdb_property_value , c_rocksdb_approximate_sizes , c_rocksdb_destroy_db , c_rocksdb_repair_db , c_rocksdb_create_iterator , c_rocksdb_create_iterator_cf , c_rocksdb_iter_destroy , c_rocksdb_iter_valid , c_rocksdb_iter_seek_to_first , c_rocksdb_iter_seek_to_last , c_rocksdb_iter_seek , c_rocksdb_iter_next , c_rocksdb_iter_prev , c_rocksdb_iter_key , c_rocksdb_iter_value , c_rocksdb_iter_get_error , c_rocksdb_writebatch_create , c_rocksdb_writebatch_destroy , c_rocksdb_writebatch_clear , c_rocksdb_writebatch_put , c_rocksdb_writebatch_put_cf , c_rocksdb_writebatch_delete , c_rocksdb_writebatch_delete_cf , c_rocksdb_options_create , c_rocksdb_options_destroy , c_rocksdb_options_set_create_if_missing , c_rocksdb_options_set_error_if_exists , c_rocksdb_options_set_paranoid_checks , c_rocksdb_options_set_max_open_files , c_rocksdb_options_set_prefix_extractor , c_rocksdb_slicetransform_create_fixed_prefix , c_rocksdb_slicetransform_destroy , c_rocksdb_filterpolicy_destroy , c_rocksdb_filterpolicy_create_bloom , c_rocksdb_readoptions_create , c_rocksdb_readoptions_destroy , c_rocksdb_readoptions_set_snapshot , c_rocksdb_writeoptions_create , c_rocksdb_writeoptions_destroy , c_rocksdb_free ) where import Foreign import Foreign.C.String import Foreign.C.Types data LRocksDB data LColumnFamily data LIterator data LOptions data LReadOpts data LSnapshot data LWriteBatch data LWriteOpts data LBloomFilter data LPrefixExtract type RocksDB = Ptr LRocksDB type ColumnFamily = Ptr LColumnFamily type Options = Ptr LOptions type WriteBatch = Ptr LWriteBatch type PrefixExtract = Ptr LPrefixExtract type ReadOpts = Ptr LReadOpts type WriteOpts = Ptr LWriteOpts type Snapshot = Ptr LSnapshot type Iterator = Ptr LIterator type BloomFilter = Ptr LBloomFilter type ErrPtr = Ptr CString type DBName = CString type CFName = CString type Key = CString type Val = CString foreign import ccall safe "rocksdb/c.h rocksdb_open" c_rocksdb_open :: Options -> DBName -> ErrPtr -> IO RocksDB foreign import ccall safe "rocksdb/c.h rocksdb_open_column_families" c_rocksdb_open_column_families :: Options -> DBName -> CInt -> Ptr CFName -> Ptr Options -> Ptr ColumnFamily -> ErrPtr -> IO RocksDB foreign import ccall safe "rocksdb/c.h rocksdb_close" c_rocksdb_close :: RocksDB -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_create_column_family" c_rocksdb_create_column_family :: RocksDB -> Options -> CFName -> ErrPtr -> IO ColumnFamily foreign import ccall safe "rocksdb/c.h rocksdb_drop_column_family" c_rocksdb_drop_column_family :: RocksDB -> ColumnFamily -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_column_family_handle_destroy" c_rocksdb_column_family_handle_destroy :: ColumnFamily -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_put" c_rocksdb_put :: RocksDB -> WriteOpts -> Key -> CSize -> Val -> CSize -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_put_cf" c_rocksdb_put_cf :: RocksDB -> WriteOpts -> ColumnFamily -> Key -> CSize -> Val -> CSize -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_delete" c_rocksdb_delete :: RocksDB -> WriteOpts -> Key -> CSize -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_delete_cf" c_rocksdb_delete_cf :: RocksDB -> WriteOpts -> ColumnFamily -> Key -> CSize -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_write" c_rocksdb_write :: RocksDB -> WriteOpts -> WriteBatch -> ErrPtr -> IO () -- | Returns NULL if not found. A malloc()ed array otherwise. -- Stores the length of the array in *vallen. foreign import ccall safe "rocksdb/c.h rocksdb_get" c_rocksdb_get :: RocksDB -> ReadOpts -> Key -> CSize -> Ptr CSize -- ^ value length -> ErrPtr -> IO CString foreign import ccall safe "rocksdb/c.h rocksdb_get_cf" c_rocksdb_get_cf :: RocksDB -> ReadOpts -> ColumnFamily -> Key -> CSize -> Ptr CSize -- ^ value length -> ErrPtr -> IO CString foreign import ccall safe "rocksdb/c.h rocksdb_multi_get" c_rocksdb_multi_get :: RocksDB -> ReadOpts -> CSize -- ^ number of keys -> Ptr CString -- ^ keys -> Ptr CSize -- ^ key sizes -> Ptr CString -- ^ values -> Ptr CSize -- ^ values sizes -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_multi_get_cf" c_rocksdb_multi_get_cf :: RocksDB -> ReadOpts -> Ptr ColumnFamily -- ^ column families -> CSize -- ^ number of keys -> Ptr CString -- ^ keys -> Ptr CSize -- ^ key sizes -> Ptr CString -- ^ values -> Ptr CSize -- ^ values sizes -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_create_snapshot" c_rocksdb_create_snapshot :: RocksDB -> IO Snapshot foreign import ccall safe "rocksdb/c.h rocksdb_release_snapshot" c_rocksdb_release_snapshot :: RocksDB -> Snapshot -> IO () -- | Returns NULL if property name is unknown. Else returns a pointer to a -- malloc()-ed null-terminated value. foreign import ccall safe "rocksdb/c.h rocksdb_property_value" c_rocksdb_property_value :: RocksDB -> CString -> IO CString foreign import ccall safe "rocksdb/c.h rocksdb_approximate_sizes" c_rocksdb_approximate_sizes :: RocksDB -> CInt -- ^ num ranges -> Ptr CString -> Ptr CSize -- ^ range start keys (array) -> Ptr CString -> Ptr CSize -- ^ range limit keys (array) -> Ptr Word64 -- ^ array of approx. sizes of ranges -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_destroy_db" c_rocksdb_destroy_db :: Options -> DBName -> ErrPtr -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_repair_db" c_rocksdb_repair_db :: Options -> DBName -> ErrPtr -> IO () -- -- Iterator -- foreign import ccall safe "rocksdb/c.h rocksdb_create_iterator" c_rocksdb_create_iterator :: RocksDB -> ReadOpts -> IO Iterator foreign import ccall safe "rocksdb/c.h rocksdb_create_iterator_cf" c_rocksdb_create_iterator_cf :: RocksDB -> ReadOpts -> ColumnFamily -> IO Iterator foreign import ccall safe "rocksdb/c.h rocksdb_iter_destroy" c_rocksdb_iter_destroy :: Iterator -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_iter_valid" c_rocksdb_iter_valid :: Iterator -> IO CUChar foreign import ccall safe "rocksdb/c.h rocksdb_iter_seek_to_first" c_rocksdb_iter_seek_to_first :: Iterator -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_iter_seek_to_last" c_rocksdb_iter_seek_to_last :: Iterator -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_iter_seek" c_rocksdb_iter_seek :: Iterator -> Key -> CSize -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_iter_next" c_rocksdb_iter_next :: Iterator -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_iter_prev" c_rocksdb_iter_prev :: Iterator -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_iter_key" c_rocksdb_iter_key :: Iterator -> Ptr CSize -> IO Key foreign import ccall safe "rocksdb/c.h rocksdb_iter_value" c_rocksdb_iter_value :: Iterator -> Ptr CSize -> IO Val foreign import ccall safe "rocksdb/c.h rocksdb_iter_get_error" c_rocksdb_iter_get_error :: Iterator -> ErrPtr -> IO () -- -- Write batch -- foreign import ccall safe "rocksdb/c.h rocksdb_writebatch_create" c_rocksdb_writebatch_create :: IO WriteBatch foreign import ccall safe "rocksdb/c.h rocksdb_writebatch_destroy" c_rocksdb_writebatch_destroy :: WriteBatch -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_writebatch_clear" c_rocksdb_writebatch_clear :: WriteBatch -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_writebatch_put" c_rocksdb_writebatch_put :: WriteBatch -> Key -> CSize -> Val -> CSize -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_writebatch_put_cf" c_rocksdb_writebatch_put_cf :: WriteBatch -> ColumnFamily -> Key -> CSize -> Val -> CSize -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_writebatch_delete" c_rocksdb_writebatch_delete :: WriteBatch -> Key -> CSize -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_writebatch_delete_cf" c_rocksdb_writebatch_delete_cf :: WriteBatch -> ColumnFamily -> Key -> CSize -> IO () -- -- Options -- foreign import ccall safe "rocksdb/c.h rocksdb_options_create" c_rocksdb_options_create :: IO Options foreign import ccall "rocksdb/c.h rocksdb_options_destroy" c_rocksdb_options_destroy :: Options -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_options_set_create_if_missing" c_rocksdb_options_set_create_if_missing :: Options -> CBool -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_options_set_error_if_exists" c_rocksdb_options_set_error_if_exists :: Options -> CBool -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_options_set_paranoid_checks" c_rocksdb_options_set_paranoid_checks :: Options -> CBool -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_options_set_max_open_files" c_rocksdb_options_set_max_open_files :: Options -> CInt -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_options_set_prefix_extractor" c_rocksdb_options_set_prefix_extractor :: Options -> PrefixExtract -> IO () -- -- Prefix Extractor -- foreign import ccall safe "rocksdb/c.h rocksdb_slicetransform_create_fixed_prefix" c_rocksdb_slicetransform_create_fixed_prefix :: CSize -> IO PrefixExtract foreign import ccall safe "rocksdb/c.h rocksdb_slicetransform_destroy" c_rocksdb_slicetransform_destroy :: PrefixExtract -> IO () -- -- Bloom Filter -- foreign import ccall safe "rocksdb/c.h rocksdb_filterpolicy_destroy" c_rocksdb_filterpolicy_destroy :: BloomFilter -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_filterpolicy_create_bloom" c_rocksdb_filterpolicy_create_bloom :: CInt -> IO BloomFilter -- -- Read options -- foreign import ccall safe "rocksdb/c.h rocksdb_readoptions_create" c_rocksdb_readoptions_create :: IO ReadOpts foreign import ccall safe "rocksdb/c.h rocksdb_readoptions_destroy" c_rocksdb_readoptions_destroy :: ReadOpts -> IO () foreign import ccall safe "rocksdb/c.h rocksdb_readoptions_set_snapshot" c_rocksdb_readoptions_set_snapshot :: ReadOpts -> Snapshot -> IO () -- -- Write options -- foreign import ccall safe "rocksdb/c.h rocksdb_writeoptions_create" c_rocksdb_writeoptions_create :: IO WriteOpts foreign import ccall safe "rocksdb/c.h rocksdb_writeoptions_destroy" c_rocksdb_writeoptions_destroy :: WriteOpts -> IO () -- -- Free -- foreign import ccall safe "rocksdb/c.h rocksdb_free" c_rocksdb_free :: CString -> IO ()