Skip to content

Commit

Permalink
merge
Browse files Browse the repository at this point in the history
  • Loading branch information
5HT committed Mar 24, 2015
1 parent bd93a60 commit 278d140
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
16 changes: 16 additions & 0 deletions mix.exs
@@ -0,0 +1,16 @@
defmodule KVS.Mixfile do
use Mix.Project

def project do
[app: :kvs,
version: "2.1.0",
description: "Erlang Abstract Database",
package: package]
end

defp package do
[files: ~w(c_src include priv src LICENSE package.exs README.md rebar.config),
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/synrc/kvs"}]
end
end
49 changes: 49 additions & 0 deletions src/store_fs.erl
@@ -0,0 +1,49 @@
-module(store_fs).
-copyright('Synrc Research Center s.r.o.').
-include("config.hrl").
-include("metainfo.hrl").
-include_lib("stdlib/include/qlc.hrl").
-compile(export_all).

start() -> ok.
stop() -> ok.
destroy() -> ok.
version() -> {version,"KVS FS"}.
dir() -> filelib:fold_files("data", "",true, fun(A,Acc)-> [{table,A}|Acc] end, []).
join() -> ensure_dir("data").
join(Node) -> ok. % should be rsync or smth
change_storage(Table,Type) -> ok.

initialize() ->
kvs:info(?MODULE,"[store_mnesia] mnesia init.~n",[]),
mnesia:create_schema([node()]),
[ kvs:init(store_fs,Module) || Module <- kvs:modules() ],
mnesia:wait_for_tables([ T#table.name || T <- kvs:tables()],infinity).

index(Tab,Key,Value) ->
Table = kvs:table(Tab),
Index = string:str(Table#table.fields,[Key]),
lists:flatten(many(fun() -> mnesia:index_read(Tab,Value,Index+1) end)).

get(RecordName, Key) -> just_one(fun() -> mnesia:read(RecordName, Key) end).
put(Records) when is_list(Records) -> void(fun() -> lists:foreach(fun mnesia:write/1, Records) end);
put(Record) -> put([Record]).
delete(Tab, Key) ->
case mnesia:transaction(fun()-> mnesia:delete({Tab, Key}) end) of
{aborted,Reason} -> {error,Reason};
{atomic,_Result} -> ok end.
count(RecordName) -> length(filelib:fold_files(lists:concat(["data/",RecordName]), "",true, fun(A,Acc)-> [A|Acc] end, [])).
all(R) -> filelib:fold_files(lists:concat(["data/",RecordName]), "",true, fun(A,Acc)-> [A|Acc] end, []).
next_id(RecordName, Incr) -> mnesia:dirty_update_counter({id_seq, RecordName}, Incr).
create_table(Name,Options) ->
X = mnesia:create_table(Name, Options),
kvs:info("Create table ~p ~nOptions ~p~nReturn ~p~n",[Name, Options,X]),
X.
add_table_index(Record, Field) -> mnesia:add_table_index(Record, Field).
exec(Q) -> F = fun() -> qlc:e(Q) end, {atomic, Val} = mnesia:transaction(F), Val.
just_one(Fun) ->
case mnesia:transaction(Fun) of
{atomic, []} -> {error, not_found};
{atomic, [R]} -> {ok, R};
{atomic, [_|_]} -> {error, duplicated};
Error -> Error end.

0 comments on commit 278d140

Please sign in to comment.