    module Database.Persist.SqlBackend.Internal.IsolationLevel where

    import Data.String (IsString(..))

    -- | Please refer to the documentation for the database in question for a full
    -- overview of the semantics of the varying isolation levels
    data IsolationLevel = ReadUncommitted
                        | ReadCommitted
                        | RepeatableRead
                        | Serializable
                        deriving (Int -> IsolationLevel -> ShowS
    [IsolationLevel] -> ShowS
    IsolationLevel -> String
    (Int -> IsolationLevel -> ShowS)
    -> (IsolationLevel -> String)
    -> ([IsolationLevel] -> ShowS)
    -> Show IsolationLevel
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> IsolationLevel -> ShowS
    showsPrec :: Int -> IsolationLevel -> ShowS
    $cshow :: IsolationLevel -> String
    show :: IsolationLevel -> String
    $cshowList :: [IsolationLevel] -> ShowS
    showList :: [IsolationLevel] -> ShowS
    Show, IsolationLevel -> IsolationLevel -> Bool
    (IsolationLevel -> IsolationLevel -> Bool)
    -> (IsolationLevel -> IsolationLevel -> Bool) -> Eq IsolationLevel
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: IsolationLevel -> IsolationLevel -> Bool
    == :: IsolationLevel -> IsolationLevel -> Bool
    $c/= :: IsolationLevel -> IsolationLevel -> Bool
    /= :: IsolationLevel -> IsolationLevel -> Bool
    Eq, Int -> IsolationLevel
    IsolationLevel -> Int
    IsolationLevel -> [IsolationLevel]
    IsolationLevel -> IsolationLevel
    IsolationLevel -> IsolationLevel -> [IsolationLevel]
    IsolationLevel
    -> IsolationLevel -> IsolationLevel -> [IsolationLevel]
    (IsolationLevel -> IsolationLevel)
    -> (IsolationLevel -> IsolationLevel)
    -> (Int -> IsolationLevel)
    -> (IsolationLevel -> Int)
    -> (IsolationLevel -> [IsolationLevel])
    -> (IsolationLevel -> IsolationLevel -> [IsolationLevel])
    -> (IsolationLevel -> IsolationLevel -> [IsolationLevel])
    -> (IsolationLevel
        -> IsolationLevel -> IsolationLevel -> [IsolationLevel])
    -> Enum IsolationLevel
    forall a.
    (a -> a)
    -> (a -> a)
    -> (Int -> a)
    -> (a -> Int)
    -> (a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> [a])
    -> (a -> a -> a -> [a])
    -> Enum a
    $csucc :: IsolationLevel -> IsolationLevel
    succ :: IsolationLevel -> IsolationLevel
    $cpred :: IsolationLevel -> IsolationLevel
    pred :: IsolationLevel -> IsolationLevel
    $ctoEnum :: Int -> IsolationLevel
    toEnum :: Int -> IsolationLevel
    $cfromEnum :: IsolationLevel -> Int
    fromEnum :: IsolationLevel -> Int
    $cenumFrom :: IsolationLevel -> [IsolationLevel]
    enumFrom :: IsolationLevel -> [IsolationLevel]
    $cenumFromThen :: IsolationLevel -> IsolationLevel -> [IsolationLevel]
    enumFromThen :: IsolationLevel -> IsolationLevel -> [IsolationLevel]
    $cenumFromTo :: IsolationLevel -> IsolationLevel -> [IsolationLevel]
    enumFromTo :: IsolationLevel -> IsolationLevel -> [IsolationLevel]
    $cenumFromThenTo :: IsolationLevel
    -> IsolationLevel -> IsolationLevel -> [IsolationLevel]
    enumFromThenTo :: IsolationLevel
    -> IsolationLevel -> IsolationLevel -> [IsolationLevel]
    Enum, Eq IsolationLevel
    Eq IsolationLevel =>
    (IsolationLevel -> IsolationLevel -> Ordering)
    -> (IsolationLevel -> IsolationLevel -> Bool)
    -> (IsolationLevel -> IsolationLevel -> Bool)
    -> (IsolationLevel -> IsolationLevel -> Bool)
    -> (IsolationLevel -> IsolationLevel -> Bool)
    -> (IsolationLevel -> IsolationLevel -> IsolationLevel)
    -> (IsolationLevel -> IsolationLevel -> IsolationLevel)
    -> Ord IsolationLevel
    IsolationLevel -> IsolationLevel -> Bool
    IsolationLevel -> IsolationLevel -> Ordering
    IsolationLevel -> IsolationLevel -> IsolationLevel
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: IsolationLevel -> IsolationLevel -> Ordering
    compare :: IsolationLevel -> IsolationLevel -> Ordering
    $c< :: IsolationLevel -> IsolationLevel -> Bool
    < :: IsolationLevel -> IsolationLevel -> Bool
    $c<= :: IsolationLevel -> IsolationLevel -> Bool
    <= :: IsolationLevel -> IsolationLevel -> Bool
    $c> :: IsolationLevel -> IsolationLevel -> Bool
    > :: IsolationLevel -> IsolationLevel -> Bool
    $c>= :: IsolationLevel -> IsolationLevel -> Bool
    >= :: IsolationLevel -> IsolationLevel -> Bool
    $cmax :: IsolationLevel -> IsolationLevel -> IsolationLevel
    max :: IsolationLevel -> IsolationLevel -> IsolationLevel
    $cmin :: IsolationLevel -> IsolationLevel -> IsolationLevel
    min :: IsolationLevel -> IsolationLevel -> IsolationLevel
    Ord, IsolationLevel
    IsolationLevel -> IsolationLevel -> Bounded IsolationLevel
    forall a. a -> a -> Bounded a
    $cminBound :: IsolationLevel
    minBound :: IsolationLevel
    $cmaxBound :: IsolationLevel
    maxBound :: IsolationLevel
    Bounded)

    makeIsolationLevelStatement :: (Monoid s, IsString s) => IsolationLevel -> s
    makeIsolationLevelStatement :: forall s. (Monoid s, IsString s) => IsolationLevel -> s
    makeIsolationLevelStatement IsolationLevel
    l = s
    "SET TRANSACTION ISOLATION LEVEL " s -> s -> s
    forall a. Semigroup a => a -> a -> a
    <> case IsolationLevel
    l of
        IsolationLevel
    ReadUncommitted -> s
    "READ UNCOMMITTED"
        IsolationLevel
    ReadCommitted -> s
    "READ COMMITTED"
        IsolationLevel
    RepeatableRead -> s
    "REPEATABLE READ"
        IsolationLevel
    Serializable -> s
    "SERIALIZABLE"