anchor.diff:  [source,cypher]
   ----
   CALL apoc.trigger.add("forceStringType",
  -"UNWIND apoc.trigger.propertiesByKey({assignedNodeProperties}, 'reference') AS prop
  +"UNWIND apoc.trigger.propertiesByKey($assignedNodeProperties, 'reference') AS prop
   CALL apoc.util.validate(apoc.meta.type(prop) <> 'STRING', 'expected string property type, got %s', [apoc.meta.type(prop)]) RETURN null", {phase:'before'})
   ----
   
  
positive.code: .Other examples
  [source,cypher]
  ----
  CALL apoc.trigger.add('timestamp','UNWIND {createdNodes} AS n SET n.ts = timestamp()');
  CALL apoc.trigger.add('lowercase','UNWIND {createdNodes} AS n SET n.id = toLower(n.name)');
  CALL apoc.trigger.add('txInfo',   'UNWIND {createdNodes} AS n SET n.txId = {transactionId}, n.txTime = {commitTime}', {phase:'after'});
  CALL apoc.trigger.add('count-removed-rels','MATCH (c:Counter) SET c.count = c.count + size([r IN {deletedRelationships} WHERE type(r) = "X"])')
  CALL apoc.trigger.add('lowercase-by-label','UNWIND apoc.trigger.nodesByLabel({assignedLabels},'Person') AS n SET n.id = toLower(n.name)')
  ----
  
  // end::trigger[]
  
negative.code: 
  [cols="1m,5"]
  |===
  | CALL apoc.trigger.add(name, statement, selector) yield name, statement, installed | add a trigger statement under a name, in the statement you can use $createdNodes, $deletedNodes etc., the selector is {phase:'before/after/rollback'} returns previous and new trigger information
  | CALL apoc.trigger.remove(name) yield name, statement, installed | remove previously added trigger, returns trigger information
  | CALL apoc.trigger.removeAll() yield name, statement, installed | removes all previously added triggers , returns trigger information
  | CALL apoc.trigger.list() yield name, statement, installed | update and list all installed triggers
  