Namdak Tonpa 10 лет назад
Родитель
Сommit
1ca171d6b8
4 измененных файлов с 64 добавлено и 61 удалено
  1. 29 22
      README.md
  2. 11 0
      include/api.hrl
  3. 12 0
      include/kvs.hrl
  4. 12 39
      src/kvs.erl

+ 29 - 22
README.md

@@ -164,15 +164,23 @@ So you can inherit from the ITERATOR record just like that:
 
 The layout of iterators are following:
 
-    1 record_name -- table name, like
-    2 id          -- index key
-    3 container   -- container name
-    4 feed_id     -- feed id
-    5 prev        -- poniter to previous object in list
-    6 next        -- next
-    7 feeds       -- subfeeds
-    8 guard,      -- aux field
-    9 ...
+```erlang
+> lists:zip(lists:seq(1,length((kvs:table(operation))#table.fields)),
+            (kvs:table(operation))#table.fields).
+
+[{1,id},
+ {2,version},
+ {3,container},
+ {4,feed_id},
+ {5,prev},
+ {6,next},
+ {7,feeds},
+ {8,guard},
+ {9,etc},
+ {10,body},
+ {11,name},
+ {12,status}]
+```
 
 This means your table will support add/remove linked list operations to lists.
 
@@ -185,21 +193,16 @@ Read the chain (undefined means all)
 
 ```erlang
 3> kvs:entries(kvs:get(feed, user), user, undefined).
-[#user{id="mes@ua.fm"},#user{id="dox@ua.fm"}]
-```
-
-or just
-
-```erlang
-4> kvs:entries(user).
-[#user{id="mes@ua.fm"},#user{id="dox@ua.fm"}]
+[#user{id="mes@ua.fm"},
+ #user{id="dox@ua.fm"}]
 ```
 
 Read flat values by all keys from table:
 
 ```erlang
 4> kvs:all(user).
-[#user{id="mes@ua.fm"},#user{id="dox@ua.fm"}]
+[#user{id="mes@ua.fm"},
+ #user{id="dox@ua.fm"}]
 ```
 
 Containers
@@ -209,10 +212,14 @@ If you are using iterators records this automatically means you are using contai
 Containers are just boxes for storing top/heads of the linked lists. Here is layout
 of containers:
 
-    1 record_name   -- container name
-    2 id            -- unique id
-    3 top           -- pointer to the list's head
-    4 entries_count -- number of elements in list
+```erlang
+> lists:zip(lists:seq(1,length((kvs:table(feed))#table.fields)),
+            (kvs:table(feed))#table.fields).
+[{1,id},
+ {2,top},
+ {3,count},
+ {4,aclver}]
+```
 
 Extending Schema
 ----------------

+ 11 - 0
include/api.hrl

@@ -1,5 +1,16 @@
 -include("metainfo.hrl").
 
+% exports
+
+-export([start/0,stop/0]).                                        % service
+-export([destroy/0,join/0,join/1,init/2]).                        % schema change
+-export([modules/0,containers/0,tables/0,table/1,version/0]).     % meta info
+-export([create/1,add/1,link/1,remove/2]).                        % chain ops
+-export([put/1,delete/2,next_id/2]).                              % raw ops
+-export([get/2,get/3,index/3]).                                   % read ops
+-export([load_db/1,save_db/1]).                                   % import/export
+
+
 % service
 
 -spec start() -> ok | {error,any()}.

+ 12 - 0
include/kvs.hrl

@@ -15,4 +15,16 @@
 
 -compile({no_auto_import,[put/2]}).
 
+-include("config.hrl").
+-include("metainfo.hrl").
+-include("state.hrl").
+-include("user.hrl").
+-include("subscription.hrl").
+-include("feed.hrl").
+-include("entry.hrl").
+-include("comment.hrl").
+-include("group.hrl").
+-include("acl.hrl").
+-include_lib("stdlib/include/qlc.hrl").
+
 -endif.

+ 12 - 39
src/kvs.erl

@@ -2,29 +2,8 @@
 -copyright('Synrc Research Center s.r.o.').
 -compile(export_all).
 
--include("api.hrl").
--include("config.hrl").
--include("metainfo.hrl").
--include("state.hrl").
 -include("kvs.hrl").
--include("user.hrl").
--include("subscription.hrl").
--include("feed.hrl").
--include("entry.hrl").
--include("comment.hrl").
--include("group.hrl").
--include("acl.hrl").
--include_lib("stdlib/include/qlc.hrl").
-
-% NOTE: API Documentation
-
--export([start/0,stop/0]).                                        % service
--export([destroy/0,join/0,join/1,init/2]).                        % schema change
--export([modules/0,containers/0,tables/0,table/1,version/0]).     % meta info
--export([create/1,add/1,link/1,remove/2]).                        % chain ops
--export([put/1,delete/2,next_id/2]).                              % raw ops
--export([get/2,get/3,index/3]).                                   % read ops
--export([load_db/1,save_db/1]).                                   % import/export
+-include("api.hrl").
 
 % Public Main Backend is given in sys.config and
 % could be obtained with application:get_env(kvs,dba,store_mnesia).
@@ -34,20 +13,22 @@ remove(Table,Key)  -> remove  (Table, Key, #kvs{mod=?DBA}).
 get(Table,Key)     -> get     (Table, Key, #kvs{mod=?DBA}).
 index(Table,K,V)   -> index   (Table, K,V, #kvs{mod=?DBA}).
 next_id(Table,DX)  -> next_id (Table, DX,  #kvs{mod=?DBA}).
+change_storage(Table,Type) -> change_storage(Table,Type, #kvs{mod=?DBA}).
+entries(A,B,C)     -> entries (A,B,C, #kvs{mod=?DBA}).
 join()             -> join    ([],    #kvs{mod=?DBA}).
 join(Node)         -> join    (Node,  #kvs{mod=?DBA}).
 count(Table)       -> count   (Table, #kvs{mod=?DBA}).
 add(Table)         -> add     (Table, #kvs{mod=?DBA}).
 all(Table)         -> all     (Table, #kvs{mod=?DBA}).
-put(Table)         -> put     (Table,#kvs{mod=?DBA}).
-link(Table)        -> link    (Table,#kvs{mod=?DBA}).
-change_storage(Table,Type) -> change_storage(Table,Type,#kvs{mod=?DBA}).
+put(Table)         -> put     (Table, #kvs{mod=?DBA}).
+link(Table)        -> link    (Table, #kvs{mod=?DBA}).
+traversal(T,S,C,D) -> traversal(T,S,C,D, #kvs{mod=?DBA}).
 start()            -> start   (#kvs{mod=?DBA}).
 stop()             -> stop    (#kvs{mod=?DBA}).
 destroy()          -> destroy (#kvs{mod=?DBA}).
 version()          -> version (#kvs{mod=?DBA}).
 dir()              -> dir     (#kvs{mod=?DBA}).
-entries(A,B,C)     -> entries (A,B,C, #kvs{mod=?DBA}).
+
 % Implementation
 
 init(Backend, Module) ->
@@ -261,11 +242,11 @@ load(Key) ->
 
 notify(_EventPath, _Data) -> skip.
 
-config(Key) -> config(kvs, Key, "").
+config(Key)     -> config(kvs, Key, "").
 config(App,Key) -> config(App,Key, "").
 config(App, Key, Default) -> case application:get_env(App,Key) of
-                              undefined -> Default;
-                              {ok,V} -> V end.
+                                  undefined -> Default;
+                                     {ok,V} -> V end.
 
 log_modules() -> [].
 -define(ALLOWED, (config(kvs,log_modules,kvs))).
@@ -275,17 +256,9 @@ log(Module, String, Args, Fun) ->
          true -> error_logger:Fun("~p:"++String, [Module|Args]);
          false -> skip end.
 
-info(Module,String, Args) ->  log(Module,String, Args, info_msg).
-info(String, Args) -> log(?MODULE, String, Args, info_msg).
-info(String) -> log(?MODULE, String, [], info_msg).
-
+info(Module, String,   Args) -> log(Module, String, Args, info_msg).
 warning(Module,String, Args) -> log(Module, String, Args, warning_msg).
-warning(String, Args) -> log(?MODULE, String, Args, warning_msg).
-warning(String) -> log(?MODULE,String, [], warning_msg).
-
-error(Module,String, Args) -> log(Module, String, Args, error_msg).
-error(String, Args) -> log(?MODULE, String, Args, error_msg).
-error(String) -> log(?MODULE, String, [], error_msg).
+error(Module, String,  Args) -> log(Module, String, Args, error_msg).
 
 dump() ->
      io:format("~20w ~20w ~10w ~10w~n",[name,storage_type,memory,size]),