1 {-# LANGUAGE OverloadedStrings #-}
    2 module Databrary.Model.Release.SQL
    3   ( releaseRow
    4   , insertRelease
    5   , updateRelease
    6   , deleteRelease
    7   ) where
    8 
    9 import qualified Language.Haskell.TH as TH
   10 
   11 import Databrary.Model.SQL.Select
   12 import Databrary.Model.Audit.SQL
   13 import Databrary.Model.Slot.SQL
   14 
   15 releaseRow :: Selector -- ^ @'Release'@
   16 releaseRow = selectColumn "slot_release" "release"
   17 
   18 releaseSets :: String -- ^ @'Release'@
   19   -> [(String, String)]
   20 releaseSets o =
   21   [ ("release", "${" ++ o ++ "}")
   22   ]
   23 
   24 insertRelease :: TH.Name -- ^ @'AuditIdentity'@
   25   -> TH.Name -- ^ @'Slot'@
   26   -> TH.Name -- ^ @'Release'@
   27   -> TH.ExpQ
   28 insertRelease ident s c = auditInsert ident "slot_release"
   29   (slotKeys (nameRef s) ++ releaseSets (nameRef c))
   30   Nothing
   31 
   32 updateRelease :: TH.Name -- ^ @'AuditIdentity'@
   33   -> TH.Name -- ^ @'Slot'@
   34   -> TH.Name -- ^ @'Release'@
   35   -> TH.ExpQ -- ^ @'Release'@
   36 updateRelease ident s c = auditUpdate ident "slot_release"
   37   (releaseSets (nameRef c))
   38   (whereEq $ slotKeys (nameRef s))
   39   Nothing
   40 
   41 deleteRelease :: TH.Name -- ^ @'AuditIdentity'@
   42   -> TH.Name -- ^ @'Slot'@
   43   -> TH.ExpQ -- ^ @()@
   44 deleteRelease ident o = auditDelete ident "slot_release"
   45   ("container = ${containerId $ containerRow $ slotContainer " ++ os ++ "} AND segment <@ ${slotSegment " ++ os ++ "}")
   46   Nothing
   47   where os = nameRef o