rocksdb-query 0.4.0 → 0.4.1
raw patch · 3 files changed
+118/−4 lines, 3 filesdep ~rocksdb-haskell-jprupp
Dependency ranges changed: rocksdb-haskell-jprupp
Files
- CHANGELOG.md +4/−0
- rocksdb-query.cabal +4/−4
- src/Database/RocksDB/Query.hs +110/−0
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.4.1+### Added+- Support column families.+ ## 0.4.0 ### Changed - Depend on my new Haskell bindings.
rocksdb-query.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 9db21bfab84b1726ca28c3398842c81f3e8d774dd4d5cde2f5667f64a52b70c9+-- hash: b80763c5cc5ac5d920a8520a11db9cf0eb4634498bd96fe94c7bca37ca199021 name: rocksdb-query-version: 0.4.0+version: 0.4.1 synopsis: RocksDB database querying library for Haskell description: Please see the README on GitHub at <https://github.com/jprupp/rocksdb-query#readme> category: Database@@ -39,7 +39,7 @@ , cereal , conduit , resourcet- , rocksdb-haskell-jprupp+ , rocksdb-haskell-jprupp >=2.1.1 , unliftio default-language: Haskell2010 @@ -56,7 +56,7 @@ , cereal , data-default , hspec- , rocksdb-haskell-jprupp+ , rocksdb-haskell-jprupp >=2.1.1 , rocksdb-query , unliftio default-language: Haskell2010
src/Database/RocksDB/Query.hs view
@@ -39,6 +39,25 @@ Left e -> throwString e Right x -> return (Just x) +-- | Read a value from the database, or 'Nothing' if not found.+retrieveCommon ::+ (MonadIO m, KeyValue key value, Serialize key, Serialize value)+ => DB+ -> Maybe ColumnFamily+ -> key+ -> m (Maybe value)+retrieveCommon db mcf key =+ f >>= \case+ Nothing -> return Nothing+ Just bytes ->+ case decode bytes of+ Left e -> throwString e+ Right x -> return (Just x)+ where+ f = case mcf of+ Just cf -> R.getCF db cf (encode key)+ Nothing -> R.get db (encode key)+ matchRecursiveList :: (MonadIO m, KeyValue key value, Serialize key, Serialize value) => key@@ -142,10 +161,25 @@ -> m () insert db key value = R.put db (encode key) (encode value) +-- | Insert a record into the database.+insertCF ::+ (MonadIO m, KeyValue key value, Serialize key, Serialize value)+ => DB+ -> ColumnFamily+ -> key+ -> value+ -> m ()+insertCF db cf key value = R.putCF db cf (encode key) (encode value)+ -- | Delete a record from the database. remove :: (MonadIO m, Key key, Serialize key) => DB -> key -> m () remove db key = delete db (encode key) +-- | Delete a record from the database.+removeCF :: (MonadIO m, Key key, Serialize key)+ => DB -> ColumnFamily -> key -> m ()+removeCF db cf key = deleteCF db cf (encode key)+ -- | Get the 'BatchOp' to insert a record in the database. insertOp :: (KeyValue key value, Serialize key, Serialize value)@@ -154,10 +188,23 @@ -> BatchOp insertOp key value = R.Put (encode key) (encode value) +-- | Get the 'BatchOp' to insert a record in the database.+insertOpCF ::+ (KeyValue key value, Serialize key, Serialize value)+ => ColumnFamily+ -> key+ -> value+ -> BatchOp+insertOpCF cf key value = R.PutCF cf (encode key) (encode value)+ -- | Get the 'BatchOp' to delete a record from the database. deleteOp :: (Key key, Serialize key) => key -> BatchOp deleteOp key = Del (encode key) +-- | Get the 'BatchOp' to delete a record from the database.+deleteOpCF :: (Key key, Serialize key) => ColumnFamily -> key -> BatchOp+deleteOpCF cf key = DelCF cf (encode key)+ -- | Write a batch to the database. writeBatch :: MonadIO m => DB -> [BatchOp] -> m () writeBatch = write@@ -175,6 +222,20 @@ 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+ , Serialize key+ , Serialize value+ )+ => DB+ -> ColumnFamily+ -> key+ -> m (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@@ -190,6 +251,22 @@ withIter db $ \it -> runConduit $ matchingSkip it base start .| headC +-- | Like 'matchingSkip', but return the first element only.+firstMatchingSkipCF ::+ ( MonadUnliftIO m+ , KeyValue key value+ , Serialize key+ , Serialize value+ )+ => DB+ -> ColumnFamily+ -> key+ -> key+ -> m (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@@ -205,6 +282,22 @@ iterSeek it (encode base) matchRecursiveList base it +-- | Like 'matching' but return a list.+matchingAsListCF ::+ ( MonadUnliftIO m+ , KeyValue key value+ , Serialize key+ , Serialize value+ )+ => DB+ -> ColumnFamily+ -> key+ -> m [(key, value)]+matchingAsListCF db cf base =+ withIterCF db cf $ \it -> do+ iterSeek it (encode base)+ matchRecursiveList base it+ -- | Like 'matchingSkip', but return a list. matchingSkipAsList :: ( MonadUnliftIO m@@ -218,5 +311,22 @@ -> m [(key, value)] matchingSkipAsList db base start = withIter db $ \it -> do+ iterSeek it (encode start)+ matchRecursiveList base it++-- | Like 'matchingSkip', but return a list.+matchingSkipAsListCF ::+ ( MonadUnliftIO m+ , KeyValue key value+ , Serialize key+ , Serialize value+ )+ => DB+ -> ColumnFamily+ -> key+ -> key+ -> m [(key, value)]+matchingSkipAsListCF db cf base start =+ withIterCF db cf $ \it -> do iterSeek it (encode start) matchRecursiveList base it