{-# 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 :: (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|]