module Database.PostgreSQL.PQTypes.Utils
( throwDB
, raw
, runQuery_
, runQuery01
, runQuery01_
, runSQL
, runSQL_
, runSQL01
, runSQL01_
, runPreparedQuery_
, runPreparedQuery01
, runPreparedQuery01_
, runPreparedSQL
, runPreparedSQL_
, runPreparedSQL01
, runPreparedSQL01_
, hpqTypesError
) where
import Control.Monad
import Control.Monad.Catch
import GHC.Stack
import Database.PostgreSQL.PQTypes.Class
import Database.PostgreSQL.PQTypes.Internal.Error
import Database.PostgreSQL.PQTypes.Internal.Exception
import Database.PostgreSQL.PQTypes.Internal.Utils
import Database.PostgreSQL.PQTypes.SQL
import Database.PostgreSQL.PQTypes.SQL.Class
import Database.PostgreSQL.PQTypes.SQL.Raw
throwDB :: (HasCallStack, Exception e, MonadDB m, MonadThrow m) => e -> m a
throwDB :: forall e (m :: * -> *) a.
(HasCallStack, Exception e, MonadDB m, MonadThrow m) =>
e -> m a
throwDB e
e = case SomeException -> Maybe DBException
forall e. Exception e => SomeException -> Maybe e
fromException (SomeException -> Maybe DBException)
-> SomeException -> Maybe DBException
forall a b. (a -> b) -> a -> b
$ e -> SomeException
forall e. Exception e => e -> SomeException
toException e
e of
Just (DBException
dbe :: DBException) -> DBException -> m a
forall e a. (HasCallStack, Exception e) => e -> m a
forall (m :: * -> *) e a.
(MonadThrow m, HasCallStack, Exception e) =>
e -> m a
throwM DBException
dbe
Maybe DBException
Nothing -> do
SomeSQL sql
sql <- m SomeSQL
forall (m :: * -> *). MonadDB m => m SomeSQL
getLastQuery
BackendPid
pid <- m BackendPid
forall (m :: * -> *). MonadDB m => m BackendPid
getBackendPid
DBException -> m a
forall e a. (HasCallStack, Exception e) => e -> m a
forall (m :: * -> *) e a.
(MonadThrow m, HasCallStack, Exception e) =>
e -> m a
throwM
DBException
{ dbeQueryContext :: sql
dbeQueryContext = sql
sql
, dbeBackendPid :: BackendPid
dbeBackendPid = BackendPid
pid
, dbeError :: e
dbeError = e
e
, dbeCallStack :: CallStack
dbeCallStack = CallStack
HasCallStack => CallStack
callStack
}
raw :: RawSQL () -> SQL
raw :: RawSQL () -> SQL
raw = Text -> SQL
mkSQL (Text -> SQL) -> (RawSQL () -> Text) -> RawSQL () -> SQL
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RawSQL () -> Text
unRawSQL
runQuery_ :: (HasCallStack, IsSQL sql, MonadDB m) => sql -> m ()
runQuery_ :: forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m) =>
sql -> m ()
runQuery_ = (HasCallStack => sql -> m ()) -> sql -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => sql -> m ()) -> sql -> m ())
-> (HasCallStack => sql -> m ()) -> sql -> m ()
forall a b. (a -> b) -> a -> b
$ m Int -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m Int -> m ()) -> (sql -> m Int) -> sql -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sql -> m Int
forall sql. (HasCallStack, IsSQL sql) => sql -> m Int
forall (m :: * -> *) sql.
(MonadDB m, HasCallStack, IsSQL sql) =>
sql -> m Int
runQuery
runQuery01 :: (HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) => sql -> m Bool
runQuery01 :: forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
sql -> m Bool
runQuery01 sql
sql = (HasCallStack => m Bool) -> m Bool
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m Bool) -> m Bool)
-> (HasCallStack => m Bool) -> m Bool
forall a b. (a -> b) -> a -> b
$ do
Int
n <- sql -> m Int
forall sql. (HasCallStack, IsSQL sql) => sql -> m Int
forall (m :: * -> *) sql.
(MonadDB m, HasCallStack, IsSQL sql) =>
sql -> m Int
runQuery sql
sql
Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
1) (m () -> m ()) -> m () -> m ()
forall a b. (a -> b) -> a -> b
$
AffectedRowsMismatch -> m ()
forall e (m :: * -> *) a.
(HasCallStack, Exception e, MonadDB m, MonadThrow m) =>
e -> m a
throwDB
AffectedRowsMismatch
{ rowsExpected :: [(Int, Int)]
rowsExpected = [(Int
0, Int
1)]
, rowsDelivered :: Int
rowsDelivered = Int
n
}
Bool -> m Bool
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> m Bool) -> Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1
runQuery01_ :: (HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) => sql -> m ()
runQuery01_ :: forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
sql -> m ()
runQuery01_ = (HasCallStack => sql -> m ()) -> sql -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => sql -> m ()) -> sql -> m ())
-> (HasCallStack => sql -> m ()) -> sql -> m ()
forall a b. (a -> b) -> a -> b
$ m Bool -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m Bool -> m ()) -> (sql -> m Bool) -> sql -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. sql -> m Bool
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
sql -> m Bool
runQuery01
runSQL :: (HasCallStack, MonadDB m) => SQL -> m Int
runSQL :: forall (m :: * -> *). (HasCallStack, MonadDB m) => SQL -> m Int
runSQL = (HasCallStack => SQL -> m Int) -> SQL -> m Int
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => SQL -> m Int
SQL -> m Int
forall sql. (HasCallStack, IsSQL sql) => sql -> m Int
forall (m :: * -> *) sql.
(MonadDB m, HasCallStack, IsSQL sql) =>
sql -> m Int
runQuery
runSQL_ :: (HasCallStack, MonadDB m) => SQL -> m ()
runSQL_ :: forall (m :: * -> *). (HasCallStack, MonadDB m) => SQL -> m ()
runSQL_ = (HasCallStack => SQL -> m ()) -> SQL -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => SQL -> m ()
SQL -> m ()
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m) =>
sql -> m ()
runQuery_
runSQL01 :: (HasCallStack, MonadDB m, MonadThrow m) => SQL -> m Bool
runSQL01 :: forall (m :: * -> *).
(HasCallStack, MonadDB m, MonadThrow m) =>
SQL -> m Bool
runSQL01 = (HasCallStack => SQL -> m Bool) -> SQL -> m Bool
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => SQL -> m Bool
SQL -> m Bool
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
sql -> m Bool
runQuery01
runSQL01_ :: (HasCallStack, MonadDB m, MonadThrow m) => SQL -> m ()
runSQL01_ :: forall (m :: * -> *).
(HasCallStack, MonadDB m, MonadThrow m) =>
SQL -> m ()
runSQL01_ = (HasCallStack => SQL -> m ()) -> SQL -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => SQL -> m ()
SQL -> m ()
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
sql -> m ()
runQuery01_
runPreparedQuery_ :: (HasCallStack, IsSQL sql, MonadDB m) => QueryName -> sql -> m ()
runPreparedQuery_ :: forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m) =>
QueryName -> sql -> m ()
runPreparedQuery_ QueryName
name = (HasCallStack => sql -> m ()) -> sql -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => sql -> m ()) -> sql -> m ())
-> (HasCallStack => sql -> m ()) -> sql -> m ()
forall a b. (a -> b) -> a -> b
$ m Int -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m Int -> m ()) -> (sql -> m Int) -> sql -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QueryName -> sql -> m Int
forall sql. (HasCallStack, IsSQL sql) => QueryName -> sql -> m Int
forall (m :: * -> *) sql.
(MonadDB m, HasCallStack, IsSQL sql) =>
QueryName -> sql -> m Int
runPreparedQuery QueryName
name
runPreparedQuery01
:: (HasCallStack, IsSQL sql, MonadDB m, MonadThrow m)
=> QueryName
-> sql
-> m Bool
runPreparedQuery01 :: forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
QueryName -> sql -> m Bool
runPreparedQuery01 QueryName
name sql
sql = (HasCallStack => m Bool) -> m Bool
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m Bool) -> m Bool)
-> (HasCallStack => m Bool) -> m Bool
forall a b. (a -> b) -> a -> b
$ do
Int
n <- QueryName -> sql -> m Int
forall sql. (HasCallStack, IsSQL sql) => QueryName -> sql -> m Int
forall (m :: * -> *) sql.
(MonadDB m, HasCallStack, IsSQL sql) =>
QueryName -> sql -> m Int
runPreparedQuery QueryName
name sql
sql
Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
1) (m () -> m ()) -> m () -> m ()
forall a b. (a -> b) -> a -> b
$
AffectedRowsMismatch -> m ()
forall e (m :: * -> *) a.
(HasCallStack, Exception e, MonadDB m, MonadThrow m) =>
e -> m a
throwDB
AffectedRowsMismatch
{ rowsExpected :: [(Int, Int)]
rowsExpected = [(Int
0, Int
1)]
, rowsDelivered :: Int
rowsDelivered = Int
n
}
Bool -> m Bool
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> m Bool) -> Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1
runPreparedQuery01_
:: (HasCallStack, IsSQL sql, MonadDB m, MonadThrow m)
=> QueryName
-> sql
-> m ()
runPreparedQuery01_ :: forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
QueryName -> sql -> m ()
runPreparedQuery01_ QueryName
name = (HasCallStack => sql -> m ()) -> sql -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => sql -> m ()) -> sql -> m ())
-> (HasCallStack => sql -> m ()) -> sql -> m ()
forall a b. (a -> b) -> a -> b
$ m Bool -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m Bool -> m ()) -> (sql -> m Bool) -> sql -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QueryName -> sql -> m Bool
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
QueryName -> sql -> m Bool
runPreparedQuery01 QueryName
name
runPreparedSQL :: (HasCallStack, MonadDB m) => QueryName -> SQL -> m Int
runPreparedSQL :: forall (m :: * -> *).
(HasCallStack, MonadDB m) =>
QueryName -> SQL -> m Int
runPreparedSQL = (HasCallStack => QueryName -> SQL -> m Int)
-> QueryName -> SQL -> m Int
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => QueryName -> SQL -> m Int
QueryName -> SQL -> m Int
forall sql. (HasCallStack, IsSQL sql) => QueryName -> sql -> m Int
forall (m :: * -> *) sql.
(MonadDB m, HasCallStack, IsSQL sql) =>
QueryName -> sql -> m Int
runPreparedQuery
runPreparedSQL_ :: (HasCallStack, MonadDB m) => QueryName -> SQL -> m ()
runPreparedSQL_ :: forall (m :: * -> *).
(HasCallStack, MonadDB m) =>
QueryName -> SQL -> m ()
runPreparedSQL_ = (HasCallStack => QueryName -> SQL -> m ())
-> QueryName -> SQL -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => QueryName -> SQL -> m ()
QueryName -> SQL -> m ()
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m) =>
QueryName -> sql -> m ()
runPreparedQuery_
runPreparedSQL01 :: (HasCallStack, MonadDB m, MonadThrow m) => QueryName -> SQL -> m Bool
runPreparedSQL01 :: forall (m :: * -> *).
(HasCallStack, MonadDB m, MonadThrow m) =>
QueryName -> SQL -> m Bool
runPreparedSQL01 = (HasCallStack => QueryName -> SQL -> m Bool)
-> QueryName -> SQL -> m Bool
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => QueryName -> SQL -> m Bool
QueryName -> SQL -> m Bool
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
QueryName -> sql -> m Bool
runPreparedQuery01
runPreparedSQL01_ :: (HasCallStack, MonadDB m, MonadThrow m) => QueryName -> SQL -> m ()
runPreparedSQL01_ :: forall (m :: * -> *).
(HasCallStack, MonadDB m, MonadThrow m) =>
QueryName -> SQL -> m ()
runPreparedSQL01_ = (HasCallStack => QueryName -> SQL -> m ())
-> QueryName -> SQL -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack HasCallStack => QueryName -> SQL -> m ()
QueryName -> SQL -> m ()
forall sql (m :: * -> *).
(HasCallStack, IsSQL sql, MonadDB m, MonadThrow m) =>
QueryName -> sql -> m ()
runPreparedQuery01_