pg-schema-0.5.0.0: src/PgSchema/DML/Insert/Types.hs
{-# LANGUAGE UndecidableInstances #-}
module PgSchema.DML.Insert.Types where
import Data.Aeson
import Data.Typeable
import Database.PostgreSQL.Simple.FromRow
import Database.PostgreSQL.Simple.ToRow
import PgSchema.Ann
import PgSchema.Types
import PgSchema.Schema
--------------------------------------------------------------------------------
-- Plain Insert / Upsert / Update
--------------------------------------------------------------------------------
type PlainIn ann r = (CRecInfo ann r, AllPlain ann r, ToRow (PgTag ann r))
type PlainOut ann r' = (CRecInfo ann r', AllPlain ann r', FromRow (PgTag ann r'))
-- | Plain insert without @RETURNING@.
-- Check that all fields belong to the root table and all mandatory fields are present.
type InsertNonReturning ann r =
(PlainIn ann r, CheckAllMandatory ann (ColsDbNames (Cols ann r)))
-- | Plain insert with @RETURNING@.
-- Check that all inserted and returned fields belong to the root table
-- and all mandatory fields are present.
type InsertReturning ann r r' = (InsertNonReturning ann r, PlainOut ann r')
-- | Plain update with @RETURNING@.
-- Check that all updated and returned fields belong to the root table.
type UpdateReturning ann r r' = (UpdateNonReturning ann r, PlainOut ann r')
-- | Plain update without @RETURNING@.
-- Check that all updated fields belong to the root table.
type UpdateNonReturning ann r = PlainIn ann r
type TreeSch ann = CSchema (AnnSch ann)
type TreeIn ann r = (CRecInfo ann r, ToJSON (PgTag ann r))
type TreeOut ann r' = (CRecInfo ann r', FromJSON (PgTag ann r'),
Typeable ann, Typeable r')
-- | Insert tree without @RETURNING@.
--
-- Check that all mandatory fields are present in all tables in tree.
-- Reference fields in the child tables are not checked - they are inserted automatically.
type InsertTreeNonReturning ann r =
(TreeSch ann, TreeIn ann r, AllMandatoryTree ann r '[])
-- | Insert tree with @RETURNING@.
--
-- Check that all mandatory fields are present in all tables in tree.
-- Reference fields in the child tables are not checked - they are inserted automatically.
--
-- It also checks that we get returnings only from the tables we inserted into.
type InsertTreeReturning ann r r' =
( InsertTreeNonReturning ann r, TreeOut ann r', ReturningIsSubtree ann r r' )
-- | Upsert tree without @RETURNING@.
--
-- Check that all mandatory fields or primary keys are present in all tables in tree.
-- Reference fields in the child tables are not checked - they are inserted automatically.
type UpsertTreeNonReturning ann r =
(TreeSch ann, TreeIn ann r, AllMandatoryOrHasPKTree ann r '[])
-- | Upsert tree with @RETURNING@.
--
-- Check that all mandatory fields or primary keys are present in all tables in tree.
-- Reference fields in the child tables are not checked - they are inserted automatically.
--
-- It also checks that we get returnings only from the tables we upserted into.
type UpsertTreeReturning ann r r' =
( UpsertTreeNonReturning ann r, TreeOut ann r', ReturningIsSubtree ann r r' )