packages feed

BerkeleyDB 0.8.6 → 0.8.7

raw patch · 4 files changed

+45/−8 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Database.Berkeley.Db: dbCursor_set_range :: [DbFlag] -> DbCursor -> ByteString -> IO (Maybe (ByteString, ByteString))

Files

BerkeleyDB.cabal view
@@ -1,5 +1,5 @@ name: BerkeleyDB-version: 0.8.6+version: 0.8.7 license: BSD3 license-file: LICENSE cabal-version: >= 1.4@@ -26,9 +26,11 @@     DARCS repository:     <http://code.haskell.org/BerkeleyDB/>     .-    Changes: 0.8:   Support db4.7 and db4.8, removed C++ binding.+    Changes: 0.7.2: Fix on db4.7+             0.8:   Support db4.7 and db4.8, removed C++ binding.              0.8.5: Add db_sync.-             0.7.2: Fix on db4.7+             0.8.6: Fix crash in transaction commit.+             0.8.7: Add dbCursor_set_range.     .     Contributors: Michael Stone, Balázs Jávorszky 
Database/Berkeley/Db.hsc view
@@ -71,6 +71,7 @@         dbCursor_dup,         dbCursor_get,         dbCursor_set,+        dbCursor_set_range,         dbCursor_put,         -- * Logging subsystem #if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 7) || DB_VERSION_MAJOR > 4@@ -1225,7 +1226,7 @@                      BSI.fromForeignPtr value 0 (fromIntegral value_len))  foreign import ccall "db_helper.h _dbCursor_set" _dbCursor_set-    :: Ptr DbCursor_struct -> Ptr Word8 -> CUInt -> Ptr (Ptr Word8) -> Ptr CUInt -> Word32 -> IO CInt+    :: Ptr DbCursor_struct -> Ptr Word8 -> CUInt -> Ptr (Ptr Word8) -> Ptr CUInt -> Ptr (Ptr Word8) -> Ptr CUInt -> Word32 -> IO CInt  -- | Move the cursor to the specified key/data pair of the database, and return -- the datum associated with the given key, or Nothing if it wasn't matched.@@ -1236,7 +1237,7 @@     alloca $ \ptr1 ->     alloca $ \ptr2 ->     withForeignPtr cur $ \c_cur -> do-        ret <- _dbCursor_set c_cur c_key (fromIntegral key_len) ptr1 ptr2 (dbOrFlags (DB_SET:flags))+        ret <- _dbCursor_set c_cur c_key (fromIntegral key_len) nullPtr nullPtr ptr1 ptr2 (dbOrFlags (DB_SET:flags))         if ret /= 0             then                 if (dbErrFromNum$ fromIntegral ret) == DB_NOTFOUND@@ -1247,6 +1248,34 @@                 value_len <- peek ptr2                 str <- newForeignPtr _freeString_finalizer c_value                 return $ Just $ BSI.fromForeignPtr str 0 (fromIntegral value_len)++-- | Move the cursor to the specified key/data pair of the database, and return+-- the next record (key, value) where the key is greater than or equal to+-- the specified key, or Nothing if no such record was found.+-- (This is DBC->get with the DB_SET_RANGE flag. The DB_SET_RANGE flag is implied.)+dbCursor_set_range :: [DbFlag] -> DbCursor -> ByteString -> IO (Maybe (ByteString, ByteString))+dbCursor_set_range flags cur key =+    withByteString key $ \c_key key_len ->+    alloca $ \ptr1 ->+    alloca $ \ptr2 ->+    alloca $ \ptr3 ->+    alloca $ \ptr4 ->+    withForeignPtr cur $ \c_cur -> do+        ret <- _dbCursor_set c_cur c_key (fromIntegral key_len) ptr1 ptr2 ptr3 ptr4 (dbOrFlags (DB_SET_RANGE:flags))+        if ret /= 0+            then+                if (dbErrFromNum$ fromIntegral ret) == DB_NOTFOUND+                    then return Nothing+                    else throwDB "dbCursor_set" ret+            else do+                c_key <- peek ptr1+                key_len <- peek ptr2+                key_str <- newForeignPtr _freeString_finalizer c_key+                c_value <- peek ptr3+                value_len <- peek ptr4+                value_str <- newForeignPtr _freeString_finalizer c_value+                return $ Just (BSI.fromForeignPtr key_str 0 (fromIntegral key_len),+                               BSI.fromForeignPtr value_str 0 (fromIntegral value_len))  foreign import ccall "db_helper.h _dbCursor_put" _dbCursor_put     :: Ptr DbCursor_struct -> Ptr Word8 -> CUInt -> Ptr Word8 -> CUInt -> Word32 -> IO CInt
Database/Berkeley/db_helper.c view
@@ -458,14 +458,15 @@     return ret; } -int _dbCursor_set(DBC** dbcp, const char* key, u_int32_t key_len, char** value, u_int32_t* value_len, u_int32_t flags)+int _dbCursor_set(DBC** dbcp, const char* key, u_int32_t key_len, char** okey, u_int32_t* okey_len,+                                                                  char** value, u_int32_t* value_len, u_int32_t flags) {     UNWRAP_DBCURSOR();     int ret;      DBT keyDbt;     memset(&keyDbt, 0, sizeof(keyDbt));-    keyDbt.flags = DB_DBT_USERMEM;+    keyDbt.flags = okey ? DB_DBT_MALLOC : DB_DBT_USERMEM;     keyDbt.data = (void*)key;     keyDbt.size = key_len; @@ -477,6 +478,10 @@      ret = dbc->get(dbc, &keyDbt, &valueDbt, flags);     if (ret == 0) {+        if (okey) {+            *okey = (char*)keyDbt.data;+            *okey_len = keyDbt.size;+        }         *value = (char*)valueDbt.data;         *value_len = valueDbt.size;     }
Database/Berkeley/db_helper.h view
@@ -63,7 +63,8 @@ int _dbCursor_del(DBC** dbcp, u_int32_t flags); int _dbCursor_dup(DBC** dbcp, DBC*** dbcursorpp, u_int32_t flags); int _dbCursor_get(DBC** dbcp, char** key, u_int32_t* key_len, char** value, u_int32_t* value_len, u_int32_t flags);-int _dbCursor_set(DBC** dbcp, const char* key, u_int32_t key_len, char** value, u_int32_t* value_len, u_int32_t flags);+int _dbCursor_set(DBC** dbcp, const char* key, u_int32_t key_len, char** okey, u_int32_t* okey_len,+                                                                  char** value, u_int32_t* value_len, u_int32_t flags); int _dbCursor_put(DBC** dbcp, const char* key, u_int32_t key_len, const char* value, u_int32_t value_len, u_int32_t flags);  #endif