{-# LANGUAGE FlexibleContexts #-}
module Database.HDBC.Record.InsertQuery (
  PreparedInsertQuery, prepare, prepareInsertQuery, withPrepareInsertQuery,
  runPreparedInsertQuery, runInsertQuery
  ) where
import Database.HDBC (IConnection, SqlValue)
import Database.Relational (InsertQuery)
import Database.Record (ToSql)
import Database.HDBC.Record.Statement
  (prepareNoFetch, withPrepareNoFetch, PreparedStatement, executeNoFetch, runNoFetch)
type PreparedInsertQuery p = PreparedStatement p ()
prepare :: IConnection conn
        => conn
        -> InsertQuery p
        -> IO (PreparedInsertQuery p)
prepare = prepareNoFetch
prepareInsertQuery :: IConnection conn
                   => conn
                   -> InsertQuery p
                   -> IO (PreparedInsertQuery p)
prepareInsertQuery = prepare
withPrepareInsertQuery :: IConnection conn
                       => conn
                       -> InsertQuery p
                       -> (PreparedInsertQuery p -> IO a)
                       -> IO a
withPrepareInsertQuery = withPrepareNoFetch
runPreparedInsertQuery :: ToSql SqlValue p
                       => PreparedInsertQuery p
                       -> p
                       -> IO Integer
runPreparedInsertQuery =  executeNoFetch
runInsertQuery :: (IConnection conn, ToSql SqlValue p)
               => conn
               -> InsertQuery p
               -> p
               -> IO Integer
runInsertQuery =  runNoFetch