anchor.diff:  % Transactional wrapper for conducting a channel search.
   
   search_rows(Node, Channel, RowsBack, SearchString) ->
  -  error_logger:info_msg("Searching for ~p from ~p (node: ~p, back: ~p)~n", [ SearchString, Channel, Node, RowsBack ]),
     Transaction=fun() ->
       get_search_results(Node, Channel, RowsBack, SearchString)
     end,
  
positive.code:   { Node, _ } = get_node_info(),
    RowData = fetch_rows(Node, Channel, User, list_to_integer(LastRow), list_to_integer(RowsBack)),
    row_renderer(RowData, Req),
    log_rt("Fetch rows", Ctime)
    ;
  handle('POST', ["searchrows"], Req) ->
    Ctime = now(),
  
negative.code:   add_row(Nodes, Channel, User, Text, Node, LastRow, RowsBack, now()).
  
  add_row(Nodes, Channel, User, Text, Node, LastRow, RowsBack, Now) ->
    Transaction=fun() ->
      lists:foreach(fun(I) ->
        case mnesia:read({ rows, { last, Channel, I } }) of
  