BerkeleyDB 0.8.3 → 0.8.4
raw patch · 4 files changed
+82/−8 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Database.Berkeley.Db: data DbEnv_native
+ Database.Berkeley.Db: dbEnv_set_data_dir :: DbEnv -> FilePath -> IO ()
+ Database.Berkeley.Db: dbEnv_set_lg_dir :: DbEnv -> FilePath -> IO ()
+ Database.Berkeley.Db: dbEnv_toNative :: DbEnv -> (Ptr DbEnv_native -> IO a) -> IO a
Files
- BerkeleyDB.cabal +5/−4
- Database/Berkeley/Db.hsc +54/−4
- Database/Berkeley/db_helper.c +20/−0
- Database/Berkeley/db_helper.h +3/−0
BerkeleyDB.cabal view
@@ -1,5 +1,5 @@ name: BerkeleyDB-version: 0.8.3+version: 0.8.4 license: BSD3 license-file: LICENSE cabal-version: >= 1.4@@ -9,9 +9,10 @@ stability: beta synopsis: Berkeley DB binding description:- Berkeley DB is a fast, scalable, fully transactional database that runs on a local file- system, and functions as a dictionary of arbitrary-sized binary blobs.- (It is NOT an SQL-based database.) This package provides a thin Haskell binding for Berkeley DB.+ This package provides a Haskell binding for Berkeley DB, which is a fast, scalable,+ fully transactional database that runs on a local file system, and functions as a+ dictionary of arbitrary-sized binary blobs. It is NOT an SQL-based database. It+ is not free for commercial use. . This is a work in progress: The coverage of the Berkeley DB API is not yet complete. Tested with Berkeley DB versions 4.7 and 4.8, but should work with earlier versions.
Database/Berkeley/Db.hsc view
@@ -18,6 +18,8 @@ dbEnv_close, DbEnvCreateFlag, dbEnv_create,+ dbEnv_set_data_dir,+ dbEnv_set_lg_dir, dbEnv_get_cache_size, dbEnv_get_lk_max_lockers, dbEnv_get_lk_max_locks,@@ -77,10 +79,13 @@ dbEnv_get_lg_regionmax, dbEnv_set_lg_regionmax, -- * Private- dbToNum, -- | Needed for BerkeleyDBXML: Binary representation of a DbFlag- dbErrFromNum, -- | Needed for BerkeleyDBXML: Convert an error code to a DbError- DbEnv_struct, -- | Needed for BerkeleyDBXML: C pointer type for a DbEnv- DbTxn_struct -- | Needed for BerkeleyDBXML: C pointer type for a DbTxn+ dbToNum,+ dbErrFromNum,+ DbEnv_struct,+ DbTxn_struct,+ -- * C integration+ DbEnv_native,+ dbEnv_toNative ) where import Foreign.C@@ -144,6 +149,7 @@ SYSTEM_ERROR Int -- ^ An errno value returned by the operating system deriving (Eq,Show) +-- | Needed for BerkeleyDBXML: Convert an error code to a DbError dbErrFromNum :: Int -> DbError dbErrFromNum (#const DB_BUFFER_SMALL) = DB_BUFFER_SMALL dbErrFromNum (#const DB_DONOTINDEX) = DB_DONOTINDEX@@ -192,6 +198,7 @@ ------ DbEnv ------------------------------------------------------------------ +-- | Needed for BerkeleyDBXML: C pointer type for a DbEnv data DbEnv_struct type DbEnv = ForeignPtr DbEnv_struct @@ -215,6 +222,47 @@ toNum DB_RPCCLIENT = 0x0000002 +foreign import ccall unsafe "db_helper.h _dbenv_set_data_dir" _dbenv_set_data_dir+ :: Ptr DbEnv_struct -> CString -> IO CInt++dbEnv_set_data_dir :: DbEnv -> FilePath -> IO ()+dbEnv_set_data_dir dbenv dir =+ withCString dir $ \c_str ->+ withForeignPtr dbenv $ \c_dbenv -> do+ ret <- _dbenv_set_data_dir c_dbenv c_str+ if ret /= 0+ then throwDB "dbEnv_set_data_dir" ret+ else return ()+++foreign import ccall unsafe "db_helper.h _dbenv_set_lg_dir" _dbenv_set_lg_dir+ :: Ptr DbEnv_struct -> CString -> IO CInt++dbEnv_set_lg_dir :: DbEnv -> FilePath -> IO ()+dbEnv_set_lg_dir dbenv dir =+ withCString dir $ \c_str ->+ withForeignPtr dbenv $ \c_dbenv -> do+ ret <- _dbenv_set_lg_dir c_dbenv c_str+ if ret /= 0+ then throwDB "dbEnv_set_lg_dir" ret+ else return ()+++foreign import ccall unsafe "db_helper.h _dbenv_toNative" _dbenv_toNative+ :: Ptr DbEnv_struct -> Ptr (Ptr DbEnv_native) -> IO CInt++data DbEnv_native+-- | Convert the Haskell handle into a native handle of type DB_ENV* which can be passed to C.+dbEnv_toNative :: DbEnv -> (Ptr DbEnv_native -> IO a) -> IO a+dbEnv_toNative dbenv code =+ alloca $ \pNative ->+ withForeignPtr dbenv $ \c_dbenv -> do+ ret <- _dbenv_toNative c_dbenv pNative+ if ret /= 0+ then throwDB "dbEnv_toNative" ret+ else code =<< peek pNative++ foreign import ccall safe "db_helper.h _dbenv_get_lk_max_lockers" _dbenv_get_lk_max_lockers :: Ptr DbEnv_struct -> Ptr CUInt -> IO CInt @@ -434,6 +482,7 @@ DB_DUPSORT +-- | Needed for BerkeleyDBXML: Binary representation of a DbFlag dbToNum :: DbFlag -> Word32 dbToNum DB_CREATE = #const DB_CREATE dbToNum DB_DURABLE_UNKNOWN = #const DB_DURABLE_UNKNOWN@@ -701,6 +750,7 @@ dbTypeToNum DB_QUEUE = 4 dbTypeToNum DB_UNKNOWN = 5 +-- | Needed for BerkeleyDBXML: C pointer type for a DbTxn data DbTxn_struct type DbTxn = ForeignPtr DbTxn_struct foreign import ccall "db_helper.h &_dbtxn_delete" _dbtxn_delete
Database/Berkeley/db_helper.c view
@@ -51,6 +51,26 @@ return ret; } +int _dbenv_toNative(MY_DBENV* dbenvp, DB_ENV** pDbEnv)+{+ int ret;+ UNWRAP_DBENV();+ *pDbEnv = dbenv;+ return 0;+}++int _dbenv_set_data_dir(MY_DBENV* dbenvp, char* dir)+{+ UNWRAP_DBENV();+ return dbenv->set_data_dir(dbenv, dir);+}++int _dbenv_set_lg_dir(MY_DBENV* dbenvp, char* dir)+{+ UNWRAP_DBENV();+ return dbenv->set_lg_dir(dbenv, dir);+}+ int _dbenv_get_lk_max_lockers(MY_DBENV* dbenvp, u_int32_t *lk_maxp) { UNWRAP_DBENV(); return dbenv->get_lk_max_lockers(dbenv, lk_maxp);
Database/Berkeley/db_helper.h view
@@ -11,6 +11,9 @@ int _dbenv_create(MY_DBENV** dbenvpp, u_int32_t flags);+int _dbenv_toNative(MY_DBENV* dbenvpp, DB_ENV** pDbEnv);+int _dbenv_set_data_dir(MY_DBENV* dbenvp, char* dir);+int _dbenv_set_lg_dir(MY_DBENV* dbenvp, char* dir); int _dbenv_get_lk_max_lockers(MY_DBENV* dbenvp, u_int32_t *lk_maxp); int _dbenv_set_lk_max_lockers(MY_DBENV* dbenvp, u_int32_t max); int _dbenv_get_lk_max_locks(MY_DBENV* dbenvp, u_int32_t *lk_maxp);