{-# LANGUAGE GADTs #-}
module Orville.PostgreSQL.Execution.Insert
( Insert
, insertToInsertExpr
, executeInsert
, executeInsertReturnEntities
, insertToTableReturning
, insertToTable
, rawInsertExpr
)
where
import Data.List.NonEmpty (NonEmpty)
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, mkInsertExpr, tableMarshaller)
data Insert readEntity returningClause where
Insert ::
AnnotatedSqlMarshaller writeEntity readEntity ->
Expr.InsertExpr ->
Insert readEntity NoReturningClause
InsertReturning :: AnnotatedSqlMarshaller writeEntity readEntity -> Expr.InsertExpr -> Insert readEntity ReturningClause
insertToInsertExpr :: Insert readEntity returningClause -> Expr.InsertExpr
insertToInsertExpr :: forall readEntity returningClause.
Insert readEntity returningClause -> InsertExpr
insertToInsertExpr (Insert AnnotatedSqlMarshaller writeEntity readEntity
_ InsertExpr
expr) = InsertExpr
expr
insertToInsertExpr (InsertReturning AnnotatedSqlMarshaller writeEntity readEntity
_ InsertExpr
expr) = InsertExpr
expr
executeInsert ::
Monad.MonadOrville m =>
Insert readEntity NoReturningClause ->
m Int
executeInsert :: forall (m :: * -> *) readEntity.
MonadOrville m =>
Insert readEntity NoReturningClause -> m Int
executeInsert (Insert AnnotatedSqlMarshaller writeEntity readEntity
_ InsertExpr
expr) =
QueryType -> InsertExpr -> m Int
forall (m :: * -> *) sql.
(MonadOrville m, SqlExpression sql) =>
QueryType -> sql -> m Int
Execute.executeAndReturnAffectedRows QueryType
QueryType.InsertQuery InsertExpr
expr
executeInsertReturnEntities ::
Monad.MonadOrville m =>
Insert readEntity ReturningClause ->
m [readEntity]
executeInsertReturnEntities :: forall (m :: * -> *) readEntity.
MonadOrville m =>
Insert readEntity ReturningClause -> m [readEntity]
executeInsertReturnEntities (InsertReturning AnnotatedSqlMarshaller writeEntity readEntity
marshaller InsertExpr
expr) =
QueryType
-> InsertExpr
-> 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.InsertQuery InsertExpr
expr AnnotatedSqlMarshaller writeEntity readEntity
marshaller
insertToTable ::
TableDefinition key writeEntity readEntity ->
NonEmpty writeEntity ->
Insert readEntity NoReturningClause
insertToTable :: forall key writeEntity readEntity.
TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity -> Insert readEntity NoReturningClause
insertToTable =
ReturningOption NoReturningClause
-> TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity
-> Insert readEntity NoReturningClause
forall returningClause key writeEntity readEntity.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity
-> Insert readEntity returningClause
insertTable ReturningOption NoReturningClause
WithoutReturning
insertToTableReturning ::
TableDefinition key writeEntity readEntity ->
NonEmpty writeEntity ->
Insert readEntity ReturningClause
insertToTableReturning :: forall key writeEntity readEntity.
TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity -> Insert readEntity ReturningClause
insertToTableReturning =
ReturningOption ReturningClause
-> TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity
-> Insert readEntity ReturningClause
forall returningClause key writeEntity readEntity.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity
-> Insert readEntity returningClause
insertTable ReturningOption ReturningClause
WithReturning
insertTable ::
ReturningOption returningClause ->
TableDefinition key writeEntity readEntity ->
NonEmpty writeEntity ->
Insert readEntity returningClause
insertTable :: forall returningClause key writeEntity readEntity.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity
-> Insert readEntity returningClause
insertTable ReturningOption returningClause
returningOption TableDefinition key writeEntity readEntity
tableDef NonEmpty writeEntity
entities =
ReturningOption returningClause
-> AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr
-> Insert readEntity returningClause
forall returningClause writeEntity readEntity.
ReturningOption returningClause
-> AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr
-> Insert readEntity returningClause
rawInsertExpr 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) (ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity
-> InsertExpr
forall returningClause key writeEntity readEntity.
ReturningOption returningClause
-> TableDefinition key writeEntity readEntity
-> NonEmpty writeEntity
-> InsertExpr
mkInsertExpr ReturningOption returningClause
returningOption TableDefinition key writeEntity readEntity
tableDef NonEmpty writeEntity
entities)
rawInsertExpr :: ReturningOption returningClause -> AnnotatedSqlMarshaller writeEntity readEntity -> Expr.InsertExpr -> Insert readEntity returningClause
rawInsertExpr :: forall returningClause writeEntity readEntity.
ReturningOption returningClause
-> AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr
-> Insert readEntity returningClause
rawInsertExpr ReturningOption returningClause
WithReturning = AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr -> Insert readEntity returningClause
AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr -> Insert readEntity ReturningClause
forall writeEntity readEntity.
AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr -> Insert readEntity ReturningClause
InsertReturning
rawInsertExpr ReturningOption returningClause
WithoutReturning = AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr -> Insert readEntity returningClause
AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr -> Insert readEntity NoReturningClause
forall writeEntity readEntity.
AnnotatedSqlMarshaller writeEntity readEntity
-> InsertExpr -> Insert readEntity NoReturningClause
Insert