hk_trigger.anubis 2.18 KB
/*
 * Created by PyramIDE.
 * User: フランスのトトロ aka (David RENÉ) 
 * Date: 18/06/2017
 * Time: 23:12
 * © David RENÉ
 */

transmit xlib/web/types/web_session.anubis
read tools/basis.anubis

public type HK_Trigger_Result:
  ok,
  error,
  abort
.

public type HK_Trigger_Type:
  before_create,
  after_create,
  before_update,
  after_update,
  before_delete,
  after_delete
.

public type HK_Trigger:
  hk_trigger(
    String            trigger_name, 
    HK_Trigger_Type   trigger_type,
    ((SQLite3DataBase db, WEB_Session session ) -> HK_Trigger_Result) trigger_call_back)  
.

public type HK_Trigger_Set:
  hk_trigger_set(
    Var(List(HK_Trigger)) before_create,    //must be called before create the requested
    Var(List(HK_Trigger)) after_create,     //must be called after  create the requested  
    Var(List(HK_Trigger)) before_update,    //must be called before update the requested
    Var(List(HK_Trigger)) after_update,     //must be called after  update the requested
    Var(List(HK_Trigger)) before_delete,    //must be called before delete the requested
    Var(List(HK_Trigger)) after_delete      //must be called after  delete the requested
  )
.

public define Maybe(HK_Trigger)
  get_trigger
  (
    List(HK_Trigger)    triggers,
    String              _trigger_name
  ) =
  if triggers is
  {
    []      then failure,
    [h . t] then 
      if h.trigger_name = _trigger_name then
        success(h)
      else
        get_trigger(t, _trigger_name)
   }
.

public define One
  add_trigger
  (
    Var(List(HK_Trigger)) triggers,
    HK_Trigger            added_trigger
  )=
  println(">>> TRIGGER "+added_trigger.trigger_name+" added");
  triggers <- [added_trigger . *triggers]
.


define List(HK_Trigger)
  _remove_trigger
  (
    List(HK_Trigger) triggers,
    String           _trigger_name
  )=
  if triggers is
  {
    []      then [],
    [h . t] then 
      if h.trigger_name = _trigger_name then
        _remove_trigger(t, _trigger_name)
      else
        [h . _remove_trigger(t, _trigger_name)]
  }
.

public define One
  remove_trigger
  (
    Var(List(HK_Trigger)) triggers,
    String                trigger_name
  )=
  triggers <- _remove_trigger(*triggers, trigger_name)
.