anchor.diff:  
   update_prepare(IsSec, SKey, Tables, ColMap, ChangeList) ->
       TableTypes = [{Schema,Table,if_call_mfa(IsSec,table_type,[SKey,{Schema,Table}])} || {Schema,Table,_Alias} <- Tables],
  -    % ?Debug("received change list~n~p~n", [ChangeList]),
  +    ?Debug("received change list~n~p", [ChangeList]),
       %% transform a ChangeList
           % [1,nop,{{def,"2","'2'"},{}},"2"],                     %% no operation on this line
           % [5,ins,{},"99"],                                      %% insert {def,"99", undefined}
  
positive.code: update_prepare(IsSec, SKey, [{_,Table,_}|_]=Tables, ColMap, CList, Acc) ->
      ColInfo = if_call_mfa(IsSec, column_infos, [SKey, Table]),    
      DefRec = list_to_tuple([Table|if_call_mfa(IsSec,column_info_items, [SKey, ColInfo, default])]),    
      % ?Debug("default record ~p~n", [DefRec]),     
      update_prepare(IsSec, SKey, Tables, ColMap, DefRec, CList, Acc);
  update_prepare(_IsSec, _SKey, _Tables, _ColMap, [CLItem|_], _Acc) ->
      ?ClientError({"Invalid format of change list", CLItem}).
  
negative.code:         [{Ci,imem_datatype:io_to_db(Item,element(Ci,element(Ti,Recs)),T,L,P,D,false,Value), R} || 
              {#ddColMap{tind=Ti, cind=Ci, type=T, len=L, prec=P, default=D, readonly=R, func=F},Value} 
              <- lists:zip(ColMap,Values), Ti==1, F==undefined]),    
      ?Debug("value map~n~p", [ValMap]),
      IndMap = lists:usort([Ci || {Ci,_,_} <- ValMap]),
      ?Debug("ind map~n~p", [IndMap]),
      TupleUpdMap = lists:usort(
                  lists:flatten([tuple_update_map(Item,I,Recs,ColMap,Values) || I <- lists:seq(1,9)])
              ),    
      ?Debug("tuple item map~n~p", [TupleUpdMap]),
      ROViolV = [{element(Ci,element(1,Recs)),NewVal} || {Ci,NewVal,R} <- ValMap, R==true, element(Ci,element(1,Recs)) /= NewVal],   
      ROViolT = [{element(Ci,element(1,Recs)),NewVal} || {Ci,Xi,NewVal,R} <- TupleUpdMap, R==true, element(Xi,element(Ci,element(1,Recs))) /= NewVal],   
      ROViol = ROViolV ++ ROViolT,
      ?Debug("key change~n~p", [ROViol]),
      if  
          length(ValMap) /= length(IndMap) ->     ?ClientError({"Contradicting column update",{Item,ValMap}});        
          length(ROViol) /= 0 ->                  ?ClientError({"Cannot update readonly field",{Item,hd(ROViol)}});        
  