Browse Source

add #interval.last

Namdak Tonpa 9 years ago
parent
commit
32f7527bb9
3 changed files with 6 additions and 5 deletions
  1. 1 1
      include/kvs.hrl
  2. 4 3
      src/kvs.erl
  3. 1 1
      src/kvs_user.erl

+ 1 - 1
include/kvs.hrl

@@ -8,7 +8,7 @@
 -record(id_seq,    {thing, id}).
 -record(container, {?CONTAINER}).
 -record(iterator,  {?ITERATOR(undefined)}).
--record(interval,  {left,right,name}).
+-record(interval,  {left,right,name,last}).
 -record(log,       {?CONTAINER, name, acc}).
 -record(operation, {?ITERATOR(log), body, name, status}).
 -record(kvs,       {mod,cx}).

+ 4 - 3
src/kvs.erl

@@ -226,7 +226,7 @@ get(RecordName, Key, #kvs{mod=Mod}) ->
     case range(RecordName,Key) of
          []   -> Mod:get(RecordName, Key);
          Name -> case Mod:get(Name, Key) of
-                      {ok,Record} -> {ok,setelement(1,Record,RecordName)};
+                      {ok,Record} -> {ok,setelement(1,Record,kvs:last(RecordName,Key))};
                       Else -> Else end end.
 
 count(RecordName,#kvs{mod=DBA}) -> DBA:count(RecordName).
@@ -283,8 +283,9 @@ dump() ->
 
 range(RecordName,Id)   -> (find(kvs:config(kvs:rname(RecordName)),RecordName,Id))#interval.name.
 topleft(RecordName,Id) -> (find(kvs:config(kvs:rname(RecordName)),RecordName,Id))#interval.left.
+last(RecordName,Id)    -> (find(kvs:config(kvs:rname(RecordName)),RecordName,Id))#interval.last.
 
-find([],_,_Id) -> #interval{left=1,right=infinity,name=[]};
+find([],_,_Id) -> #interval{left=1,right=infinity,name=[],last=[]};
 find([Range|T],RecordName,Id) ->
      case lookup(Range,Id) of
           [] -> find(T,RecordName,Id);
@@ -322,7 +323,7 @@ last_table(T)  -> list_to_atom(lists:concat([T,omitone(lists:max(proplists:get_v
 fold_tables()  -> lists:foldl(fun(#table{name=X},Acc) ->
                   wf:setkey(kvs:rname(X),1,Acc,{kvs:rname(X),[kvs:nname(X)|proplists:get_value(kvs:rname(X),Acc,[])]}) end,
                   [], kvs:tables()).
-interval(L,R,Name) -> #interval{left=L,right=R,name=Name}.
+interval(L,R,Name) -> #interval{left=L,right=R,name=Name,last=last_table(rname(Name))}.
 update_config(Table,Name) ->
     kvs:put(#config{key   = Table,
                     value = store(Table,case kvs:get(config,Table)  of

+ 1 - 1
src/kvs_user.erl

@@ -8,7 +8,7 @@
 
 metainfo() ->
     #schema{name=kvs,tables=[
-%        #table{name=user2,container=feed,fields=record_info(fields,user2)},
+        #table{name=user2,container=feed,fields=record_info(fields,user2)},
         #table{name=group,container=feed,fields=record_info(fields,group)},
         #table{name=user,container=feed,fields=record_info(fields,user),
                  keys=[facebook_id,googleplus_id,twitter_id,github_id]}