Current section

Files

Jump to
lamb src lamb.erl
Raw

src/lamb.erl

-module(lamb).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from_name/1, is_alive/1, create_table/3, delete_table/1, insert/2, update/2, delete/2, get/2, all/2, batch/3, continue/1, count/2]).
-export_type([table/2, store/0, access/0, error/1, partial/1, step/0]).
-opaque table(GND, GNE) :: {table_set, gleam@erlang:reference_()} |
{table_bag, gleam@erlang:reference_()} |
{gleam_phantom, GND, GNE}.
-type store() :: set | bag.
-type access() :: public | protected | private.
-type error(GNF) :: {not_supported, store()} |
{not_found, GNF} |
{already_exists, access(), gleam@erlang@atom:atom_()}.
-type partial(GNG) :: {records, list(GNG), step()} | {'end', list(GNG)}.
-type step() :: any().
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 221).
-spec build_table(gleam@erlang:reference_(), store()) -> table(any(), any()).
build_table(Table_id, Store) ->
case Store of
set ->
{table_set, Table_id};
bag ->
{table_bag, Table_id}
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 228).
-spec get_table_id(table(any(), any())) -> gleam@erlang:reference_().
get_table_id(Table) ->
case Table of
{table_set, Table_id} ->
Table_id;
{table_bag, Table_id@1} ->
Table_id@1
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 94).
-spec from_name(binary()) -> {ok, gleam@erlang:reference_()} | {error, nil}.
from_name(Name) ->
case gleam_erlang_ffi:atom_from_string(Name) of
{ok, Atom} ->
lamb_erlang_ffi:table_id(Atom);
{error, _} ->
{error, nil}
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 101).
-spec is_alive(table(any(), any())) -> boolean().
is_alive(Table) ->
Table_id = get_table_id(Table),
case lamb_erlang_ffi:table_id(Table_id) of
{ok, _} ->
true;
{error, _} ->
false
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 41).
-spec create_table(store(), access(), binary()) -> {ok, table(any(), any())} |
{error, error(any())}.
create_table(Store, Access, Name) ->
Name@1 = erlang:binary_to_atom(Name),
case Access of
private ->
Table_id = lamb_erlang_ffi:create_table(Store, Access, Name@1),
_pipe = Table_id,
_pipe@1 = build_table(_pipe, Store),
{ok, _pipe@1};
protected ->
case lamb_erlang_ffi:table_id(Name@1) of
{ok, _} ->
{error, {already_exists, Access, Name@1}};
{error, nil} ->
Name@2 = lamb_erlang_ffi:create_table(Store, Access, Name@1),
_assert_subject = lamb_erlang_ffi:table_id(Name@2),
{ok, Table_id@1} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"lamb"/utf8>>,
function => <<"create_table"/utf8>>,
line => 70})
end,
_pipe@2 = Table_id@1,
_pipe@3 = build_table(_pipe@2, Store),
{ok, _pipe@3}
end;
public ->
case lamb_erlang_ffi:table_id(Name@1) of
{ok, _} ->
{error, {already_exists, Access, Name@1}};
{error, nil} ->
Name@2 = lamb_erlang_ffi:create_table(Store, Access, Name@1),
_assert_subject = lamb_erlang_ffi:table_id(Name@2),
{ok, Table_id@1} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"lamb"/utf8>>,
function => <<"create_table"/utf8>>,
line => 70})
end,
_pipe@2 = Table_id@1,
_pipe@3 = build_table(_pipe@2, Store),
{ok, _pipe@3}
end
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 81).
-spec delete_table(table(any(), any())) -> nil.
delete_table(Table) ->
case is_alive(Table) of
true ->
_pipe = Table,
_pipe@1 = get_table_id(_pipe),
ets:delete(_pipe@1),
nil;
false ->
nil
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 124).
-spec insert(table(GNY, GNZ), list({GNY, GNZ})) -> nil.
insert(Table, Rows) ->
Table_id = get_table_id(Table),
_assert_subject = ets:insert(Table_id, Rows),
true = case _assert_subject of
true -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"lamb"/utf8>>,
function => <<"insert"/utf8>>,
line => 126})
end,
nil.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 132).
-spec update(table(GOD, GOE), lamb@query:'query'(GOD, GOE)) -> {ok, integer()} |
{error, error(GOD)}.
update(Table, Query) ->
case Table of
{table_set, Table_id} ->
{ok, ets:select_replace(Table_id, [Query])};
{table_bag, _} ->
{error, {not_supported, bag}}
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 158).
-spec delete(table(GOM, GON), lamb@query:'query'(GOM, GON)) -> integer().
delete(Table, Query) ->
Table_id = get_table_id(Table),
ets:select_delete(
Table_id,
[begin
_pipe = Query,
lamb_query_erlang_ffi:update_body(_pipe, true)
end]
).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 171).
-spec get(table(GOS, GOT), GOS) -> {ok, GOT} | {error, error(GOS)}.
get(Table, Index) ->
case Table of
{table_set, Table_id} ->
_pipe = lamb_erlang_ffi:get(Table_id, Index),
gleam@result:replace_error(_pipe, {not_found, Index});
{table_bag, _} ->
{error, {not_supported, bag}}
end.
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 186).
-spec all(table(GOZ, GPA), lamb@query:'query'(GOZ, GPA)) -> list(any()).
all(Table, Query) ->
Table_id = get_table_id(Table),
ets:select(Table_id, [Query]).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 199).
-spec batch(table(GPH, GPI), integer(), lamb@query:'query'(GPH, GPI)) -> partial(any()).
batch(Table, Limit, Query) ->
Table_id = get_table_id(Table),
lamb_erlang_ffi:search(Table_id, Limit, [Query]).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 208).
-spec continue(step()) -> partial(any()).
continue(Step) ->
lamb_erlang_ffi:search(Step).
-file("/Users/chouzar/Bench/Projects/lamb/src/lamb.gleam", 212).
-spec count(table(GPR, GPS), lamb@query:'query'(GPR, GPS)) -> integer().
count(Table, Query) ->
Table_id = get_table_id(Table),
ets:select_count(
Table_id,
[begin
_pipe = Query,
lamb_query_erlang_ffi:update_body(_pipe, true)
end]
).