rel8-1.0.0.0: src/Rel8/Statement/Returning.hs
{-# language GADTs #-}
{-# language StandaloneKindSignatures #-}
module Rel8.Statement.Returning
( Returning(..)
)
where
-- base
import Data.Int ( Int64 )
import Data.Kind ( Type )
import Prelude ()
-- rel8
import Rel8.Schema.Name ( Selects )
import Rel8.Table.Serialize ( Serializable )
-- | @INSERT@, @UPDATE@ and @DELETE@ all support returning either the number of
-- rows affected, or the actual rows modified. 'Projection' allows you to
-- project out of these returned rows, which can be useful if you want to log
-- exactly which rows were deleted, or to view a generated id (for example, if
-- using a column with an autoincrementing counter as a default value).
type Returning :: Type -> Type -> Type
data Returning names a where
NumberOfRowsAffected :: Returning names Int64
Projection :: (Selects names exprs, Serializable projection a)
=> (exprs -> projection)
-> Returning names [a]