{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Orville.PostgreSQL.Expr.Transaction
( BeginTransactionExpr
, beginTransaction
, TransactionMode
, readWrite
, readOnly
, deferrable
, notDeferrable
, isolationLevel
, IsolationLevel
, serializable
, repeatableRead
, readCommitted
, readUncommitted
, CommitExpr
, commit
, RollbackExpr
, rollback
, rollbackTo
, SavepointExpr
, savepoint
, ReleaseSavepointExpr
, releaseSavepoint
)
where
import Data.Maybe (maybeToList)
import qualified Orville.PostgreSQL.Expr.Name as Name
import qualified Orville.PostgreSQL.Raw.RawSql as RawSql
newtype BeginTransactionExpr
= BeginTransactionExpr RawSql.RawSql
deriving (RawSql -> BeginTransactionExpr
BeginTransactionExpr -> RawSql
(BeginTransactionExpr -> RawSql)
-> (RawSql -> BeginTransactionExpr)
-> SqlExpression BeginTransactionExpr
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: BeginTransactionExpr -> RawSql
toRawSql :: BeginTransactionExpr -> RawSql
$cunsafeFromRawSql :: RawSql -> BeginTransactionExpr
unsafeFromRawSql :: RawSql -> BeginTransactionExpr
RawSql.SqlExpression)
beginTransaction :: Maybe TransactionMode -> BeginTransactionExpr
beginTransaction :: Maybe TransactionMode -> BeginTransactionExpr
beginTransaction Maybe TransactionMode
maybeTransactionMode =
RawSql -> BeginTransactionExpr
BeginTransactionExpr (RawSql -> BeginTransactionExpr) -> RawSql -> BeginTransactionExpr
forall a b. (a -> b) -> a -> b
$
RawSql -> [RawSql] -> RawSql
forall sql (f :: * -> *).
(SqlExpression sql, Foldable f) =>
RawSql -> f sql -> RawSql
RawSql.intercalate RawSql
RawSql.space ([RawSql] -> RawSql) -> [RawSql] -> RawSql
forall a b. (a -> b) -> a -> b
$
( String -> RawSql
RawSql.fromString String
"BEGIN TRANSACTION"
RawSql -> [RawSql] -> [RawSql]
forall a. a -> [a] -> [a]
: Maybe RawSql -> [RawSql]
forall a. Maybe a -> [a]
maybeToList (TransactionMode -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql (TransactionMode -> RawSql)
-> Maybe TransactionMode -> Maybe RawSql
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe TransactionMode
maybeTransactionMode)
)
newtype TransactionMode
= TransactionMode RawSql.RawSql
deriving (RawSql -> TransactionMode
TransactionMode -> RawSql
(TransactionMode -> RawSql)
-> (RawSql -> TransactionMode) -> SqlExpression TransactionMode
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: TransactionMode -> RawSql
toRawSql :: TransactionMode -> RawSql
$cunsafeFromRawSql :: RawSql -> TransactionMode
unsafeFromRawSql :: RawSql -> TransactionMode
RawSql.SqlExpression)
readWrite :: TransactionMode
readWrite :: TransactionMode
readWrite =
RawSql -> TransactionMode
TransactionMode (String -> RawSql
RawSql.fromString String
"READ WRITE")
readOnly :: TransactionMode
readOnly :: TransactionMode
readOnly =
RawSql -> TransactionMode
TransactionMode (String -> RawSql
RawSql.fromString String
"READ ONLY")
deferrable :: TransactionMode
deferrable :: TransactionMode
deferrable =
RawSql -> TransactionMode
TransactionMode (String -> RawSql
RawSql.fromString String
"DEFERRABLE")
notDeferrable :: TransactionMode
notDeferrable :: TransactionMode
notDeferrable =
RawSql -> TransactionMode
TransactionMode (String -> RawSql
RawSql.fromString String
"NOT DEFERRABLE")
isolationLevel :: IsolationLevel -> TransactionMode
isolationLevel :: IsolationLevel -> TransactionMode
isolationLevel IsolationLevel
level =
RawSql -> TransactionMode
TransactionMode (RawSql -> TransactionMode) -> RawSql -> TransactionMode
forall a b. (a -> b) -> a -> b
$
(String -> RawSql
RawSql.fromString String
"ISOLATION LEVEL " RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> IsolationLevel -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql IsolationLevel
level)
newtype IsolationLevel
= IsolationLevel RawSql.RawSql
deriving (RawSql -> IsolationLevel
IsolationLevel -> RawSql
(IsolationLevel -> RawSql)
-> (RawSql -> IsolationLevel) -> SqlExpression IsolationLevel
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: IsolationLevel -> RawSql
toRawSql :: IsolationLevel -> RawSql
$cunsafeFromRawSql :: RawSql -> IsolationLevel
unsafeFromRawSql :: RawSql -> IsolationLevel
RawSql.SqlExpression)
serializable :: IsolationLevel
serializable :: IsolationLevel
serializable =
RawSql -> IsolationLevel
IsolationLevel (String -> RawSql
RawSql.fromString String
"SERIALIZABLE")
repeatableRead :: IsolationLevel
repeatableRead :: IsolationLevel
repeatableRead =
RawSql -> IsolationLevel
IsolationLevel (String -> RawSql
RawSql.fromString String
"REPEATABLE READ")
readCommitted :: IsolationLevel
readCommitted :: IsolationLevel
readCommitted =
RawSql -> IsolationLevel
IsolationLevel (String -> RawSql
RawSql.fromString String
"READ COMMITTED")
readUncommitted :: IsolationLevel
readUncommitted :: IsolationLevel
readUncommitted =
RawSql -> IsolationLevel
IsolationLevel (String -> RawSql
RawSql.fromString String
"READ UNCOMMITTED")
newtype CommitExpr
= CommitExpr RawSql.RawSql
deriving (RawSql -> CommitExpr
CommitExpr -> RawSql
(CommitExpr -> RawSql)
-> (RawSql -> CommitExpr) -> SqlExpression CommitExpr
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: CommitExpr -> RawSql
toRawSql :: CommitExpr -> RawSql
$cunsafeFromRawSql :: RawSql -> CommitExpr
unsafeFromRawSql :: RawSql -> CommitExpr
RawSql.SqlExpression)
commit :: CommitExpr
commit :: CommitExpr
commit =
RawSql -> CommitExpr
CommitExpr (String -> RawSql
RawSql.fromString String
"COMMIT")
newtype RollbackExpr
= RollbackExpr RawSql.RawSql
deriving (RawSql -> RollbackExpr
RollbackExpr -> RawSql
(RollbackExpr -> RawSql)
-> (RawSql -> RollbackExpr) -> SqlExpression RollbackExpr
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: RollbackExpr -> RawSql
toRawSql :: RollbackExpr -> RawSql
$cunsafeFromRawSql :: RawSql -> RollbackExpr
unsafeFromRawSql :: RawSql -> RollbackExpr
RawSql.SqlExpression)
rollback :: RollbackExpr
rollback :: RollbackExpr
rollback =
RawSql -> RollbackExpr
RollbackExpr (String -> RawSql
RawSql.fromString String
"ROLLBACK")
rollbackTo :: Name.SavepointName -> RollbackExpr
rollbackTo :: SavepointName -> RollbackExpr
rollbackTo SavepointName
savepointName =
RawSql -> RollbackExpr
RollbackExpr (RawSql -> RollbackExpr) -> RawSql -> RollbackExpr
forall a b. (a -> b) -> a -> b
$
String -> RawSql
RawSql.fromString String
"ROLLBACK TO SAVEPOINT " RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> SavepointName -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql SavepointName
savepointName
newtype SavepointExpr
= SavepointExpr RawSql.RawSql
deriving (RawSql -> SavepointExpr
SavepointExpr -> RawSql
(SavepointExpr -> RawSql)
-> (RawSql -> SavepointExpr) -> SqlExpression SavepointExpr
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: SavepointExpr -> RawSql
toRawSql :: SavepointExpr -> RawSql
$cunsafeFromRawSql :: RawSql -> SavepointExpr
unsafeFromRawSql :: RawSql -> SavepointExpr
RawSql.SqlExpression)
savepoint :: Name.SavepointName -> SavepointExpr
savepoint :: SavepointName -> SavepointExpr
savepoint SavepointName
savepointName =
RawSql -> SavepointExpr
SavepointExpr (RawSql -> SavepointExpr) -> RawSql -> SavepointExpr
forall a b. (a -> b) -> a -> b
$
String -> RawSql
RawSql.fromString String
"SAVEPOINT " RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> SavepointName -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql SavepointName
savepointName
newtype ReleaseSavepointExpr
= ReleaseSavepontExpr RawSql.RawSql
deriving (RawSql -> ReleaseSavepointExpr
ReleaseSavepointExpr -> RawSql
(ReleaseSavepointExpr -> RawSql)
-> (RawSql -> ReleaseSavepointExpr)
-> SqlExpression ReleaseSavepointExpr
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: ReleaseSavepointExpr -> RawSql
toRawSql :: ReleaseSavepointExpr -> RawSql
$cunsafeFromRawSql :: RawSql -> ReleaseSavepointExpr
unsafeFromRawSql :: RawSql -> ReleaseSavepointExpr
RawSql.SqlExpression)
releaseSavepoint :: Name.SavepointName -> ReleaseSavepointExpr
releaseSavepoint :: SavepointName -> ReleaseSavepointExpr
releaseSavepoint SavepointName
savepointName =
RawSql -> ReleaseSavepointExpr
ReleaseSavepontExpr (RawSql -> ReleaseSavepointExpr) -> RawSql -> ReleaseSavepointExpr
forall a b. (a -> b) -> a -> b
$
String -> RawSql
RawSql.fromString String
"RELEASE SAVEPOINT " RawSql -> RawSql -> RawSql
forall a. Semigroup a => a -> a -> a
<> SavepointName -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql SavepointName
savepointName