module Database.Selda.Backend
( MonadSelda (..), SeldaT, SeldaM, SeldaError (..)
, StmtID, BackendID (..), QueryRunner, SeldaBackend (..), SeldaConnection
, SqlType (..), SqlValue (..), SqlTypeRep (..)
, Param (..), Lit (..), ColAttr (..)
, PPConfig (..), defPPConfig
, newConnection, allStmts, seldaBackend
, runSeldaT, seldaClose
, sqlDateTimeFormat, sqlDateFormat, sqlTimeFormat
) where
import Database.Selda.Backend.Internal
import Control.Monad
import Control.Monad.Catch
import Control.Monad.IO.Class
import Data.IORef
seldaClose :: MonadIO m => SeldaConnection -> m ()
seldaClose c = liftIO $ mask_ $ do
closed <- atomicModifyIORef' (connClosed c) $ \closed -> (True, closed)
unless closed $ closeConnection (connBackend c) c