anchor.diff:          , audit_readGT/5    %% (User, Channel, Item, TS1, Limit)    read audit info after Timestamp1, return Limit results or less
           , hist_read/3       %% (User, Channel, KeyList)             return history list as maps for given keys
           , hist_read_deleted/3 %% (User, Channel, Key)               return the oldvalue of the deleted object
  -        , hist_read_shallow/3 %% (User, Channel, Key)               return the shallow list of deleted objects
  -        , search_deleted/6  %% (User, Channel, Ckey1, Ckey2, Text, DelStatus) from key at or after CKey1 to last key before CKey2, finds {K,V} with text in V
  -        , search_deleted_clients/6 %% (User, Channel, Ckey1, Ckey2, Text, Limit) from key at or after CKey1 to last key before CKey2, finds {K,V} with text in V in deleted clients
  -        , search_deleted_objects/6 %% (User, Channel, Ckey1, Ckey2, Text, Limit) from key at or after CKey1 to last key before CKey2, finds {K,V} with text in V in deleted objects
           , remove/3          %% (User, Channel, RowList)             delete a resource will fail if it was modified, rows should be in map format
           , remove/4          %% (User, Channel, RowList, Opts)       delete a resource will fail if it was modified, rows should be in map format, with trigger options
           , delete/3          %% (User, Channel, KeyTable)            do not complain if keys do not exist
  
positive.code: 
  skvh_rec_to_map(#skvhTable{ckey=EncodedKey, cvalue=CValue, chash=CHash}) ->
      CKey = imem_datatype:binterm_to_term(EncodedKey),
      #{ckey => CKey, cvalue => CValue, chash => CHash}.
  
  skvh_audit_to_map(#skvhAudit{time = Time, ckey = EncodedKey, ovalue = OldValue,
                               nvalue = NewValue, cuser = User}) ->
  
negative.code: -export([ table_name/1              %% (Channel)                    return table name as binstr
          , atom_table_name/1         %% (Channel)                    return table name as atom
          , audit_alias/1             %% (Channel)                    return audit alias as bisntr
          , atom_history_alias/1      %% (Channel)                    return history alias as atom
          , create_table/4            %% (Name,[],Opts,Owner)         create empty table / audit table / history table (Name as binary or atom)
          , drop_table/1              %% (Name)
          , channel_ctx/1             %% (Name)                       return #skvhCtx{mainAlias=Tab, auditAlias=Audit, histAlias=Hist}
  