CurryInfo: spicey-4.2.0 / Spicey.ControllerGeneration.updateTransaction

definition: Info
 
updateTransaction :: ControllerGenerator
updateTransaction erdname (Entity entityName attrList) _ allEntities =
  stCmtFunc
    ("Transaction to persist modifications of a given " ++ entityName ++
     " entity\nto the database.")
    (transFunctionName entityName "update")
    2 Private
    (tupleType ([baseType (model erdname, entityName)] ++
                 map (\ (name,_) -> listType (ctvar name)) manyToManyEntities)
      ~> applyTC (dbconn "DBAction") [unitType])
    [simpleRule 
      [tuplePattern
             ([CPVar (0, lowerFirst entityName)] ++
              (map (\ (param, varId) -> CPVar (varId, param)) 
                   (zip (map (\ (ename,erel) -> lowerFirst erel ++ ename ++ "s")
                             manyToManyEntities)
                        [1..])))
      ] -- parameter list for controller
      (doExpr $
         (CSExpr (applyF (model erdname, "update" ++ entityName)
                         [cvar (lowerFirst entityName)]) :
         (concatMap (\ (ename,erel) ->
            [CSPat (CPVar (0, "old" ++ erel ++ ename ++ "s"))
                   (applyF (controllerModuleName entityName,
                            "get" ++ erel ++ entityName ++ ename ++ "s")
                           [cvar (lowerFirst entityName)]),
             CSExpr (applyF (controllerModuleName entityName,
                             "remove" ++ erel)
                            [cvar ("old"++ erel ++ ename ++ "s"),
                             cvar (lowerFirst entityName)])])
               manyToManyEntities
                      ) ++
         (map (\ (ename,erel) -> CSExpr $
                  applyF (controllerModuleName entityName, "add" ++ erel)
                         [cvar (lowerFirst erel ++ ename ++ "s"),
                          cvar (lowerFirst entityName)])
              manyToManyEntities)
         ))]
 where
  manyToManyEntities = manyToMany allEntities (Entity entityName attrList)
demand: Info
 argument 2
deterministic: Info
 deterministic operation
documentation: Info
 
Generates the transaction to update an entity.
failfree: Info
 <FAILING>
indeterministic: Info
 referentially transparent operation
infix: Info
 no fixity defined
iotype: Info
 {(_,{Entity},_,_) |-> _}
name: Info
 updateTransaction
precedence: Info
 no precedence defined
result-values: Info
 _
signature: Info
 String -> Database.ERD.Entity -> [Database.ERD.Relationship]
-> [Database.ERD.Entity] -> AbstractCurry.Types.CFuncDecl
solution-complete: Info
 operation might suspend on free variables
terminating: Info
 possibly non-terminating
totally-defined: Info
 possibly non-reducible on same data term