Current section

Files

Jump to
database src database.erl
Raw

src/database.erl

-module(database).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src\\database.gleam").
-export([create_table/2, transaction/2, insert/2, delete/2, find/2, drop_table/1]).
-export_type([storage/0, table_attributes/0, table_ref/1, table/1]).
-type storage() :: set.
-type table_attributes() :: {file, gleam@erlang@charlist:charlist()} |
{type, storage()} |
{keypos, integer()}.
-type table_ref(EIC) :: any() | {gleam_phantom, EIC}.
-opaque table(EID) :: {table,
gleam@erlang@atom:atom_(),
list(table_attributes()),
gleam@erlang@charlist:charlist()} |
{gleam_phantom, EID}.
-file("src\\database.gleam", 53).
-spec create_table(EJI, integer()) -> {ok, table(EJI)} | {error, any()}.
create_table(Sample, Keypos) ->
At = erlang:element(1, Sample),
Name = erlang:atom_to_binary(At),
Path = unicode:characters_to_list(<<Name/binary, ".dets"/utf8>>),
Att = [{file, Path}, {type, set}, {keypos, Keypos + 2}],
case dets:open_file(At, Att) of
{ok, Tab} ->
case dets:close(Tab) of
{error, Reason} ->
{error, Reason};
_ ->
{ok, {table, At, Att, Path}}
end;
{error, Reason@1} ->
{error, Reason@1}
end.
-file("src\\database.gleam", 75).
-spec transaction(table(EJN), fun((table_ref(EJN)) -> EJQ)) -> {ok, EJQ} |
{error, any()}.
transaction(Table, Procedure) ->
case dets:open_file(erlang:element(2, Table), erlang:element(3, Table)) of
{error, Reason} ->
{error, Reason};
{ok, Ref} ->
Resp = Procedure(Ref),
case dets:close(Ref) of
{error, Reason@1} ->
{error, Reason@1};
_ ->
{ok, Resp}
end
end.
-file("src\\database.gleam", 91).
-spec insert(table_ref(EJU), EJU) -> {ok, nil} | {error, any()}.
insert(Transac, Value) ->
case dets:insert(Transac, Value) of
{error, Reason} ->
{error, Reason};
_ ->
{ok, nil}
end.
-file("src\\database.gleam", 98).
-spec delete(table_ref(any()), any()) -> {ok, nil} | {error, any()}.
delete(Transac, Index) ->
case dets:delete(Transac, Index) of
{error, Reason} ->
{error, Reason};
_ ->
{ok, nil}
end.
-file("src\\database.gleam", 105).
-spec find(table_ref(EKB), any()) -> {ok, EKB} | {error, nil}.
find(Transac, Index) ->
case dets:lookup(Transac, Index) of
[Resp] ->
{ok, Resp};
_ ->
{error, nil}
end.
-file("src\\database.gleam", 112).
-spec drop_table(table(any())) -> {ok, nil} | {error, any()}.
drop_table(Table) ->
case file:delete(erlang:element(4, Table)) of
{error, Reason} ->
{error, Reason};
_ ->
{ok, nil}
end.