rocksdb-query 0.4.3 → 0.5.0
raw patch · 4 files changed
+42/−53 lines, 4 filesdep +temporarydep −unliftioPVP ok
version bump matches the API change (PVP)
Dependencies added: temporary
Dependencies removed: unliftio
API changes (from Hackage documentation)
- Database.RocksDB.Query: firstMatching :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> key -> m (Maybe (key, value))
+ Database.RocksDB.Query: firstMatching :: (KeyValue key value, Serialize key, Serialize value) => DB -> key -> IO (Maybe (key, value))
- Database.RocksDB.Query: firstMatchingCF :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> m (Maybe (key, value))
+ Database.RocksDB.Query: firstMatchingCF :: (KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> IO (Maybe (key, value))
- Database.RocksDB.Query: firstMatchingSkip :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> key -> key -> m (Maybe (key, value))
+ Database.RocksDB.Query: firstMatchingSkip :: (KeyValue key value, Serialize key, Serialize value) => DB -> key -> key -> IO (Maybe (key, value))
- Database.RocksDB.Query: firstMatchingSkipCF :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> key -> m (Maybe (key, value))
+ Database.RocksDB.Query: firstMatchingSkipCF :: (KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> key -> IO (Maybe (key, value))
- Database.RocksDB.Query: matchRecursive :: forall (m :: Type -> Type) key value i. (MonadIO m, KeyValue key value, Serialize key, Serialize value) => key -> Iterator -> ConduitT i (key, value) m ()
+ Database.RocksDB.Query: matchRecursive :: (KeyValue key value, Serialize key, Serialize value) => key -> Iterator -> ConduitT i (key, value) IO ()
- Database.RocksDB.Query: matchRecursiveList :: (MonadIO m, KeyValue key value, Serialize key, Serialize value) => key -> Iterator -> m [(key, value)]
+ Database.RocksDB.Query: matchRecursiveList :: (KeyValue key value, Serialize key, Serialize value) => key -> Iterator -> IO [(key, value)]
- Database.RocksDB.Query: matching :: forall (m :: Type -> Type) key value i. (MonadIO m, KeyValue key value, Serialize key, Serialize value) => Iterator -> key -> ConduitT i (key, value) m ()
+ Database.RocksDB.Query: matching :: (KeyValue key value, Serialize key, Serialize value) => Iterator -> key -> ConduitT i (key, value) IO ()
- Database.RocksDB.Query: matchingAsList :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> key -> m [(key, value)]
+ Database.RocksDB.Query: matchingAsList :: (KeyValue key value, Serialize key, Serialize value) => DB -> key -> IO [(key, value)]
- Database.RocksDB.Query: matchingAsListCF :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> m [(key, value)]
+ Database.RocksDB.Query: matchingAsListCF :: (KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> IO [(key, value)]
- Database.RocksDB.Query: matchingSkip :: forall (m :: Type -> Type) key value i. (MonadIO m, KeyValue key value, Serialize key, Serialize value) => Iterator -> key -> key -> ConduitT i (key, value) m ()
+ Database.RocksDB.Query: matchingSkip :: (KeyValue key value, Serialize key, Serialize value) => Iterator -> key -> key -> ConduitT i (key, value) IO ()
- Database.RocksDB.Query: matchingSkipAsList :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> key -> key -> m [(key, value)]
+ Database.RocksDB.Query: matchingSkipAsList :: (KeyValue key value, Serialize key, Serialize value) => DB -> key -> key -> IO [(key, value)]
- Database.RocksDB.Query: matchingSkipAsListCF :: (MonadUnliftIO m, KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> key -> m [(key, value)]
+ Database.RocksDB.Query: matchingSkipAsListCF :: (KeyValue key value, Serialize key, Serialize value) => DB -> ColumnFamily -> key -> key -> IO [(key, value)]
Files
- CHANGELOG.md +4/−0
- rocksdb-query.cabal +3/−6
- src/Database/RocksDB/Query.hs +33/−45
- test/Spec.hs +2/−2
CHANGELOG.md view
@@ -4,6 +4,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## 0.5.0+### Changed+- Improvements to rocksdb-haskell-jprupp package.+ ## 0.4.2 ### Adedd - Forgot to add retrieval using column families.
rocksdb-query.cabal view
@@ -1,13 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.38.0.+-- This file has been generated from package.yaml by hpack version 0.39.6. -- -- see: https://github.com/sol/hpack------ hash: 399259d1d70dd1b29a3cf2d188fc5ec1a3ba82a7e55489b3bacc3d1cb2be9aaf name: rocksdb-query-version: 0.4.3+version: 0.5.0 synopsis: RocksDB database querying library for Haskell description: Please see the README on GitHub at <https://github.com/jprupp/rocksdb-query#readme> category: Database@@ -40,7 +38,6 @@ , conduit , resourcet , rocksdb-haskell-jprupp >=2.1.1- , unliftio default-language: Haskell2010 test-suite rocksdb-query-test@@ -58,5 +55,5 @@ , hspec , rocksdb-haskell-jprupp >=2.1.1 , rocksdb-query- , unliftio+ , temporary default-language: Haskell2010
src/Database/RocksDB/Query.hs view
@@ -17,7 +17,6 @@ import qualified Data.ByteString as B import Data.Serialize as S import Database.RocksDB as R-import UnliftIO -- | Class for types that are database keys. class Key key@@ -53,7 +52,7 @@ Nothing -> return Nothing Just bytes -> case decode bytes of- Left e -> throwString e+ Left e -> error e Right x -> return (Just x) where f = case mcf of@@ -61,10 +60,10 @@ Nothing -> R.get db (encode key) matchRecursiveList ::- (MonadIO m, KeyValue key value, Serialize key, Serialize value)+ (KeyValue key value, Serialize key, Serialize value) => key -> Iterator- -> m [(key, value)]+ -> IO [(key, value)] matchRecursiveList base it = go where go = iterEntry it >>= \case@@ -72,8 +71,8 @@ Just (key_bytes, value_bytes) -> if base_bytes `B.isPrefixOf` key_bytes then do- key <- either throwString return (decode key_bytes)- value <- either throwString return (decode value_bytes)+ key <- either error return (decode key_bytes)+ value <- either error return (decode value_bytes) iterNext it ((key, value) :) <$> go else return []@@ -81,25 +80,24 @@ -- | Internal function for recursively matching a key. matchRecursive ::- ( MonadIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => key -> Iterator- -> ConduitT i (key, value) m ()+ -> ConduitT i (key, value) IO () matchRecursive base it = go where go =- iterEntry it >>= \case+ liftIO (iterEntry it) >>= \case Nothing -> return () Just (key_bytes, value_bytes) -> when (base_bytes `B.isPrefixOf` key_bytes) $ do- key <- either throwString return (decode key_bytes)- value <- either throwString return (decode value_bytes)+ key <- either error return (decode key_bytes)+ value <- either error return (decode value_bytes) yield (key, value)- iterNext it+ liftIO (iterNext it) go base_bytes = encode base @@ -126,32 +124,30 @@ -- the 'Serialize' instance for @MyKey@ only understands how to deserialize a -- @FullKey@, then that is what is returned. matching ::- ( MonadIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => Iterator -> key- -> ConduitT i (key, value) m ()+ -> ConduitT i (key, value) IO () matching it base = do- iterSeek it (encode base)+ liftIO (iterSeek it (encode base)) matchRecursive base it -- | Like 'matching', but skip to the second key passed as argument, or after if -- there is no entry for the second key. matchingSkip ::- ( MonadIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => Iterator -> key -> key- -> ConduitT i (key, value) m ()+ -> ConduitT i (key, value) IO () matchingSkip it base start = do- iterSeek it (encode start)+ liftIO (iterSeek it (encode start)) matchRecursive base it -- | Insert a record into the database.@@ -213,50 +209,46 @@ -- | Like 'matching' but return the first element only. firstMatching ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => DB -> key- -> m (Maybe (key, value))+ -> IO (Maybe (key, value)) firstMatching db base = withIter db $ \it -> runConduit $ matching it base .| headC -- | Like 'matching' but return the first element only. firstMatchingCF ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => DB -> ColumnFamily -> key- -> m (Maybe (key, value))+ -> IO (Maybe (key, value)) firstMatchingCF db cf base = withIterCF db cf $ \it -> runConduit $ matching it base .| headC -- | Like 'matchingSkip', but return the first element only. firstMatchingSkip ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => DB -> key -> key- -> m (Maybe (key, value))+ -> IO (Maybe (key, value)) firstMatchingSkip db base start = withIter db $ \it -> runConduit $ matchingSkip it base start .| headC -- | Like 'matchingSkip', but return the first element only. firstMatchingSkipCF ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value )@@ -264,21 +256,20 @@ -> ColumnFamily -> key -> key- -> m (Maybe (key, value))+ -> IO (Maybe (key, value)) firstMatchingSkipCF db cf base start = withIterCF db cf $ \it -> runConduit $ matchingSkip it base start .| headC -- | Like 'matching' but return a list. matchingAsList ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => DB -> key- -> m [(key, value)]+ -> IO [(key, value)] matchingAsList db base = withIter db $ \it -> do iterSeek it (encode base)@@ -286,15 +277,14 @@ -- | Like 'matching' but return a list. matchingAsListCF ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => DB -> ColumnFamily -> key- -> m [(key, value)]+ -> IO [(key, value)] matchingAsListCF db cf base = withIterCF db cf $ \it -> do iterSeek it (encode base)@@ -302,15 +292,14 @@ -- | Like 'matchingSkip', but return a list. matchingSkipAsList ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value ) => DB -> key -> key- -> m [(key, value)]+ -> IO [(key, value)] matchingSkipAsList db base start = withIter db $ \it -> do iterSeek it (encode start)@@ -318,8 +307,7 @@ -- | Like 'matchingSkip', but return a list. matchingSkipAsListCF ::- ( MonadUnliftIO m- , KeyValue key value+ ( KeyValue key value , Serialize key , Serialize value )@@ -327,7 +315,7 @@ -> ColumnFamily -> key -> key- -> m [(key, value)]+ -> IO [(key, value)] matchingSkipAsListCF db cf base start = withIterCF db cf $ \it -> do iterSeek it (encode start)
test/Spec.hs view
@@ -8,7 +8,7 @@ import Database.RocksDB as R import Database.RocksDB.Query import Test.Hspec-import UnliftIO+import System.IO.Temp newtype KeyOne = KeyOne Word32 deriving (Show, Eq) data KeyTwo@@ -74,7 +74,7 @@ insertTestRecords db hspec $ f db -insertTestRecords :: MonadIO m => DB -> m ()+insertTestRecords :: DB -> IO () insertTestRecords db = do insert db (KeyOne 1) "Hello World!" insert db (KeyOne 2) "Hello World Again!"