{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Orville.PostgreSQL.Expr.Delete
( DeleteExpr
, deleteExpr
)
where
import Data.Maybe (catMaybes)
import Orville.PostgreSQL.Expr.Name (Qualified, TableName)
import Orville.PostgreSQL.Expr.ReturningExpr (ReturningExpr)
import Orville.PostgreSQL.Expr.WhereClause (WhereClause)
import qualified Orville.PostgreSQL.Raw.RawSql as RawSql
newtype DeleteExpr
= DeleteExpr RawSql.RawSql
deriving
(
RawSql -> DeleteExpr
DeleteExpr -> RawSql
(DeleteExpr -> RawSql)
-> (RawSql -> DeleteExpr) -> SqlExpression DeleteExpr
forall a. (a -> RawSql) -> (RawSql -> a) -> SqlExpression a
$ctoRawSql :: DeleteExpr -> RawSql
toRawSql :: DeleteExpr -> RawSql
$cunsafeFromRawSql :: RawSql -> DeleteExpr
unsafeFromRawSql :: RawSql -> DeleteExpr
RawSql.SqlExpression
)
deleteExpr ::
Qualified TableName ->
Maybe WhereClause ->
Maybe ReturningExpr ->
DeleteExpr
deleteExpr :: Qualified TableName
-> Maybe WhereClause -> Maybe ReturningExpr -> DeleteExpr
deleteExpr Qualified TableName
tableName Maybe WhereClause
maybeWhereClause Maybe ReturningExpr
maybeReturningExpr =
RawSql -> DeleteExpr
DeleteExpr (RawSql -> DeleteExpr) -> RawSql -> DeleteExpr
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
$
[Maybe RawSql] -> [RawSql]
forall a. [Maybe a] -> [a]
catMaybes
[ RawSql -> Maybe RawSql
forall a. a -> Maybe a
Just (RawSql -> Maybe RawSql) -> RawSql -> Maybe RawSql
forall a b. (a -> b) -> a -> b
$ String -> RawSql
RawSql.fromString String
"DELETE FROM"
, RawSql -> Maybe RawSql
forall a. a -> Maybe a
Just (RawSql -> Maybe RawSql) -> RawSql -> Maybe RawSql
forall a b. (a -> b) -> a -> b
$ Qualified TableName -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql Qualified TableName
tableName
, (WhereClause -> RawSql) -> Maybe WhereClause -> Maybe RawSql
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WhereClause -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql Maybe WhereClause
maybeWhereClause
, (ReturningExpr -> RawSql) -> Maybe ReturningExpr -> Maybe RawSql
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ReturningExpr -> RawSql
forall a. SqlExpression a => a -> RawSql
RawSql.toRawSql Maybe ReturningExpr
maybeReturningExpr
]