hasbolt-extras-0.0.0.7: src/Database/Bolt/Extras/Query/Delete.hs
{-# 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|]