rel8-1.1.0.0: src/Rel8/Statement/Set.hs
{-# language MonoLocalBinds #-}
{-# language NamedFieldPuns #-}
module Rel8.Statement.Set
( ppSet
)
where
-- base
import Data.Foldable ( toList )
import Prelude ()
-- opaleye
import qualified Opaleye.Internal.HaskellDB.Sql.Print as Opaleye
import qualified Opaleye.Internal.Sql as Opaleye
-- pretty
import Text.PrettyPrint ( Doc, (<+>), equals, text )
-- rel8
import Rel8.Schema.Name ( Selects, ppColumn )
import Rel8.Schema.Table ( TableSchema(..) )
import Rel8.Table.Opaleye ( attributes, exprsWithNames )
ppSet :: Selects names exprs
=> TableSchema names -> (exprs -> exprs) -> Doc
ppSet schema@TableSchema {columns} f =
text "SET" <+> Opaleye.commaV ppAssign (toList assigns)
where
assigns = exprsWithNames columns (f (attributes schema))
ppAssign (column, expr) =
ppColumn column <+> equals <+> Opaleye.ppSqlExpr (Opaleye.sqlExpr expr)