-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(<>), 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.