{-# LANGUAGE FlexibleContexts #-}
module Database.HDBC.Record.Delete (
  PreparedDelete, prepare, prepareDelete, withPrepareDelete,
  runPreparedDelete, runDelete
  ) where
import Database.HDBC (IConnection, SqlValue)
import Database.Relational (Delete)
import Database.Record (ToSql)
import Database.HDBC.Record.Statement
  (prepareNoFetch, withPrepareNoFetch, PreparedStatement, executeNoFetch, runNoFetch)
type PreparedDelete p = PreparedStatement p ()
prepare :: IConnection conn
        => conn
        -> Delete p
        -> IO (PreparedDelete p)
prepare =  prepareNoFetch
prepareDelete :: IConnection conn
              => conn
              -> Delete p
              -> IO (PreparedDelete p)
prepareDelete = prepare
withPrepareDelete :: IConnection conn
              => conn
              -> Delete p
              -> (PreparedDelete p -> IO a)
              -> IO a
withPrepareDelete = withPrepareNoFetch
runPreparedDelete :: ToSql SqlValue p
                  => PreparedDelete p
                  -> p
                  -> IO Integer
runPreparedDelete =  executeNoFetch
runDelete :: (IConnection conn, ToSql SqlValue p)
          => conn
          -> Delete p
          -> p
          -> IO Integer
runDelete =  runNoFetch