Bug in mnesia:dirty_update_counter

Dan Gudmundsson dgud@REDACTED
Wed Mar 9 11:37:02 CET 2005


It's a (broken) feature..:-) 

I probably can't change that behaviour, but I can document it..

/Dan

Anders Nygren writes:
 > There seems to be a bug in mnesia:dirty_update_counter. 
 > The first time dirty_update_counter(Tab,Key,Incr) is called with a specific Key
 > the counter is set to 0.
 > The offending code seems to be mnesia_tm:do_update_op(....)
 > 
 > 
 > do_update_op(Tid, Storage, {{Tab, K}, {RecName, Incr}, update_counter}) ->
 >     {NewObj, OldObjs} = 
 >         case catch mnesia_lib:db_update_counter(Storage, Tab, K, Incr) of
 >             NewVal when integer(NewVal), NewVal >= 0 ->
 >                 {{RecName, K, NewVal}, [{RecName, K, NewVal - Incr}]};
 >             _ ->
 >                 Zero = {RecName, K, 0},    
 >                 mnesia_lib:db_put(Storage, Tab, Zero),
 >                 {Zero, []}
 >         end,
 >     commit_update(?catch_val({Tab, commit_work}), Tid, Tab, 
 > 		  K, NewObj, OldObjs),
 >     element(3, NewObj);
 > 
 > It always stores 0 when there is no record with the specified Key.
 > 
 > /Anders Nygren




More information about the erlang-questions mailing list