hasbolt-extras 0.0.0.6 → 0.0.0.7
raw patch · 5 files changed
+46/−4 lines, 5 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Database.Bolt.Extras.Query: deleteNodes :: (MonadIO m) => [BoltId] -> BoltActionT m [BoltId]
Files
- CHANGELOG.md +4/−0
- hasbolt-extras.cabal +2/−1
- src/Database/Bolt/Extras/Query.hs +2/−0
- src/Database/Bolt/Extras/Query/Delete.hs +35/−0
- src/Database/Bolt/Extras/Query/Set.hs +3/−3
CHANGELOG.md view
@@ -6,6 +6,10 @@ ## [Unreleased] +## [0.0.0.7] - 2018-04-23+### Added+- Added ability to delete nodes by their `BoltId`s.+ ## [0.0.0.6] - 2018-04-20 ### Added - Added ability to update properties of the existing node; added ability to choose
hasbolt-extras.cabal view
@@ -1,5 +1,5 @@ name: hasbolt-extras-version: 0.0.0.6+version: 0.0.0.7 synopsis: Extras for hasbolt library description: Extras for hasbolt library homepage: https://github.com/biocad/hasbolt-extras#readme@@ -33,6 +33,7 @@ other-modules: Database.Bolt.Extras.Query.Get , Database.Bolt.Extras.Query.Put , Database.Bolt.Extras.Query.Set+ , Database.Bolt.Extras.Query.Delete , Database.Bolt.Extras.Query.Utils Database.Bolt.Extras.Query.Cypher
src/Database/Bolt/Extras/Query.hs view
@@ -12,6 +12,7 @@ , getGraph , putGraph , setNode+ , deleteNodes ) where import Database.Bolt.Extras.Query.Cypher (ToCypher (..))@@ -25,4 +26,5 @@ PutRelationship (..), putGraph) import Database.Bolt.Extras.Query.Set (setNode)+import Database.Bolt.Extras.Query.Delete (deleteNodes) import Database.Bolt.Extras.Query.Utils (NodeName)
+ src/Database/Bolt/Extras/Query/Delete.hs view
@@ -0,0 +1,35 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}++module Database.Bolt.Extras.Query.Delete+ (+ deleteNodes+ ) where++import Control.Monad (forM)+import Control.Monad.IO.Class (MonadIO)+import Data.Text (Text, intercalate, pack)+import Database.Bolt (BoltActionT, RecordValue (..),+ at, exact, query)+import Database.Bolt.Extras.Persisted (BoltId, fromInt)+import NeatInterpolation (text)++-- | 'deleteNodes' is used to delete all nodes with given 'BoltId's+-- and all corresponding relatioships.+--+deleteNodes :: (MonadIO m) => [BoltId] -> BoltActionT m [BoltId]+deleteNodes boltIds = do+ records <- query formQuery+ forM records $ \record -> do+ nodeIdentity' <- record `at` varQ >>= exact+ pure $ fromInt nodeIdentity'+ where+ varQ = "n"++ formBoltIds :: Text+ formBoltIds = intercalate ", " $ fmap (pack . show) boltIds++ formQuery = [text|MATCH ($varQ)+ WHERE ID($varQ) IN [$formBoltIds]+ DETACH DELETE $varQ+ RETURN ID($varQ) as $varQ|]
src/Database/Bolt/Extras/Query/Set.hs view
@@ -10,7 +10,7 @@ import Data.Text (Text, append, intercalate) import Database.Bolt (BoltActionT, RecordValue (..), at,- exact, query)+ exact, query, Value (..)) import Database.Bolt.Extras.Persisted (BoltId, fromInt) import Database.Bolt.Extras.Query.Cypher (ToCypher (..)) import Database.Bolt.Extras.Query.Get (NodeGetter, condIdAsText,@@ -26,11 +26,11 @@ let nodeGetterT = nodeAsText (varQ, nodeGetter) let condId = condIdAsText (varQ, nodeGetter) - let newProperties = intercalate ", " $ fmap formPropertySet props+ let newProperties = intercalate "," $ fmap formPropertySet $ filter ((/= N ()) . snd) props let getQuery = [text|MATCH $nodeGetterT WHERE $condId- SET $newProperties+ SET $newProperties RETURN ID($varQ) as $varQ|] record <- head <$> query getQuery