{-# LANGUAGE GADTs #-}
module Orville.PostgreSQL.Execution.Delete
( Delete
, deleteFromDeleteExpr
, executeDelete
, executeDeleteReturnEntities
, deleteFromTableReturning
, deleteFromTable
, rawDeleteExpr
)
where
import qualified Orville.PostgreSQL.Execution.Execute as Execute
import qualified Orville.PostgreSQL.Execution.QueryType as QueryType
import Orville.PostgreSQL.Execution.ReturningOption (NoReturningClause, ReturningClause, ReturningOption (WithReturning, WithoutReturning))
import qualified Orville.PostgreSQL.Expr as Expr
import Orville.PostgreSQL.Marshall.SqlMarshaller (AnnotatedSqlMarshaller)
import qualified Orville.PostgreSQL.Monad as Monad
import Orville.PostgreSQL.Schema (TableDefinition, mkTableReturningClause, tableMarshaller, tableName)
data Delete readEntity returningClause where
Delete ::
Expr.DeleteExpr ->
Delete readEntity NoReturningClause
DeleteReturning :: AnnotatedSqlMarshaller writeEntity readEntity -> Expr.DeleteExpr -> Delete readEntity ReturningClause
deleteFromDeleteExpr :: Delete readEntity returningClause -> Expr.DeleteExpr
deleteFromDeleteExpr :: forall readEntity returningClause.
Delete readEntity returningClause -> DeleteExpr
deleteFromDeleteExpr (Delete DeleteExpr
expr) = DeleteExpr
expr
deleteFromDeleteExpr (DeleteReturning AnnotatedSqlMarshaller writeEntity readEntity
_ DeleteExpr
expr) = DeleteExpr
expr
executeDelete ::
Monad.MonadOrville m =>
Delete readEntity NoReturningClause ->
m Int
executeDelete :: forall (m :: * -> *) readEntity.
MonadOrville m =>
Delete readEntity NoReturningClause -> m Int
executeDelete (Delete DeleteExpr
expr) =
QueryType -> DeleteExpr -> m Int
forall (m :: * -> *) sql.
(MonadOrville m, SqlExpression sql) =>
QueryType -> sql -> m Int
Execute.executeAndReturnAffectedRows QueryType
QueryType.DeleteQuery DeleteExpr
expr
executeDeleteReturnEntities ::
Monad.MonadOrville m =>
Delete readEntity ReturningClause ->
m [readEntity]
executeDeleteReturnEntities :: forall (m :: * -> *) readEntity.
MonadOrville m =>
Delete readEntity ReturningClause -> m [readEntity]
executeDeleteReturnEntities (DeleteReturning AnnotatedSqlMarshaller writeEntity readEntity
marshaller DeleteExpr
expr) =
QueryType
-> DeleteExpr
-> AnnotatedSqlMarshaller writeEntity readEntity
-> m [readEntity]
forall (m :: * -> *) sql writeEntity readEntity.
(MonadOrville m, SqlExpression sql) =>
QueryType
-> sql
-> AnnotatedSqlMarshaller writeEntity readEntity
-> m [readEntity]
Execute.executeAndDecode QueryType
QueryType.DeleteQuery DeleteExpr
expr AnnotatedSqlMarshaller writeEntity readEntity
marshaller
deleteFromTable ::
TableDefinition key writeEntity readEntity ->
Maybe Expr.BooleanExpr ->
Delete readEntity NoReturningClause
deleteFromTable :: forall key writeEntity readEntity.
TableDefinition key writeEntity readEntity
-> Maybe BooleanExpr -> Delete readEntity NoReturningClause
deleteFromTable =
ReturningOption NoReturningClause
-> TableDefinition key writeEntity readEntity
-> Maybe BooleanExpr
-> Delete readEntity NoReturningClause
forall returningClause key writeEntity readEntity.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> Maybe BooleanExpr
-> Delete readEntity returningClause
deleteTable ReturningOption NoReturningClause
WithoutReturning
deleteFromTableReturning ::
TableDefinition key writeEntity readEntity ->
Maybe Expr.BooleanExpr ->
Delete readEntity ReturningClause
deleteFromTableReturning :: forall key writeEntity readEntity.
TableDefinition key writeEntity readEntity
-> Maybe BooleanExpr -> Delete readEntity ReturningClause
deleteFromTableReturning =
ReturningOption ReturningClause
-> TableDefinition key writeEntity readEntity
-> Maybe BooleanExpr
-> Delete readEntity ReturningClause
forall returningClause key writeEntity readEntity.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> Maybe BooleanExpr
-> Delete readEntity returningClause
deleteTable ReturningOption ReturningClause
WithReturning
deleteTable ::
ReturningOption returningClause ->
TableDefinition key writeEntity readEntity ->
Maybe Expr.BooleanExpr ->
Delete readEntity returningClause
deleteTable :: forall returningClause key writeEntity readEntity.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> Maybe BooleanExpr
-> Delete readEntity returningClause
deleteTable ReturningOption returningClause
returningOption TableDefinition key writeEntity readEntity
tableDef Maybe BooleanExpr
whereCondition =
let
deleteExpr :: DeleteExpr
deleteExpr =
Qualified TableName
-> Maybe WhereClause -> Maybe ReturningExpr -> DeleteExpr
Expr.deleteExpr
(TableDefinition key writeEntity readEntity -> Qualified TableName
forall key writeEntity readEntity.
TableDefinition key writeEntity readEntity -> Qualified TableName
tableName TableDefinition key writeEntity readEntity
tableDef)
((BooleanExpr -> WhereClause)
-> Maybe BooleanExpr -> Maybe WhereClause
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap BooleanExpr -> WhereClause
Expr.whereClause Maybe BooleanExpr
whereCondition)
(ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> Maybe ReturningExpr
forall returningClause key writeEntity readEntty.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntty -> Maybe ReturningExpr
mkTableReturningClause ReturningOption returningClause
returningOption TableDefinition key writeEntity readEntity
tableDef)
in
ReturningOption returningClause
-> AnnotatedSqlMarshaller writeEntity readEntity
-> DeleteExpr
-> Delete readEntity returningClause
forall returningClause writeEntity readEntity.
ReturningOption returningClause
-> AnnotatedSqlMarshaller writeEntity readEntity
-> DeleteExpr
-> Delete readEntity returningClause
rawDeleteExpr ReturningOption returningClause
returningOption (TableDefinition key writeEntity readEntity
-> AnnotatedSqlMarshaller writeEntity readEntity
forall key writeEntity readEntity.
TableDefinition key writeEntity readEntity
-> AnnotatedSqlMarshaller writeEntity readEntity
tableMarshaller TableDefinition key writeEntity readEntity
tableDef) DeleteExpr
deleteExpr
rawDeleteExpr :: ReturningOption returningClause -> AnnotatedSqlMarshaller writeEntity readEntity -> Expr.DeleteExpr -> Delete readEntity returningClause
rawDeleteExpr :: forall returningClause writeEntity readEntity.
ReturningOption returningClause
-> AnnotatedSqlMarshaller writeEntity readEntity
-> DeleteExpr
-> Delete readEntity returningClause
rawDeleteExpr ReturningOption returningClause
WithReturning AnnotatedSqlMarshaller writeEntity readEntity
marshaller = AnnotatedSqlMarshaller writeEntity readEntity
-> DeleteExpr -> Delete readEntity ReturningClause
forall writeEntity readEntity.
AnnotatedSqlMarshaller writeEntity readEntity
-> DeleteExpr -> Delete readEntity ReturningClause
DeleteReturning AnnotatedSqlMarshaller writeEntity readEntity
marshaller
rawDeleteExpr ReturningOption returningClause
WithoutReturning AnnotatedSqlMarshaller writeEntity readEntity
_ = DeleteExpr -> Delete readEntity returningClause
DeleteExpr -> Delete readEntity NoReturningClause
forall readEntity.
DeleteExpr -> Delete readEntity NoReturningClause
Delete