Packages

An embedded, crash-safe key-value store for Gleam, inspired by CubDB

Current section

Files

Jump to
trove src trove@internal@tx.erl
Raw

src/trove@internal@tx.erl

-module(trove@internal@tx).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/trove/internal/tx.gleam").
-export([new/5, set_token/2, token/1, nonce/1, set_nonce_tracker/2, get_tree/1, get/2, put/3, delete/2]).
-export_type([tx/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-opaque tx(JTR, JTS) :: {tx,
trove@internal@btree:btree(JTR, JTS),
trove@internal@store:store(),
trove@codec:codec(JTR),
trove@codec:codec(JTS),
fun((JTR, JTR) -> gleam@order:order()),
gleam@erlang@reference:reference_(),
gleam@erlang@reference:reference_(),
gleam@option:option(gleam@erlang@process:subject(gleam@erlang@reference:reference_()))}.
-file("src/trove/internal/tx.gleam", 27).
?DOC(false).
-spec new(
trove@internal@btree:btree(JTT, JTU),
trove@internal@store:store(),
trove@codec:codec(JTT),
trove@codec:codec(JTU),
fun((JTT, JTT) -> gleam@order:order())
) -> tx(JTT, JTU).
new(Tree, Store, Key_codec, Value_codec, Key_compare) ->
{tx,
Tree,
Store,
Key_codec,
Value_codec,
Key_compare,
erlang:make_ref(),
erlang:make_ref(),
none}.
-file("src/trove/internal/tx.gleam", 46).
?DOC(false).
-spec set_token(tx(JUB, JUC), gleam@erlang@reference:reference_()) -> tx(JUB, JUC).
set_token(Tx, Token) ->
{tx,
erlang:element(2, Tx),
erlang:element(3, Tx),
erlang:element(4, Tx),
erlang:element(5, Tx),
erlang:element(6, Tx),
Token,
erlang:element(8, Tx),
erlang:element(9, Tx)}.
-file("src/trove/internal/tx.gleam", 50).
?DOC(false).
-spec token(tx(any(), any())) -> gleam@erlang@reference:reference_().
token(Tx) ->
erlang:element(7, Tx).
-file("src/trove/internal/tx.gleam", 54).
?DOC(false).
-spec nonce(tx(any(), any())) -> gleam@erlang@reference:reference_().
nonce(Tx) ->
erlang:element(8, Tx).
-file("src/trove/internal/tx.gleam", 58).
?DOC(false).
-spec set_nonce_tracker(
tx(JUP, JUQ),
gleam@option:option(gleam@erlang@process:subject(gleam@erlang@reference:reference_()))
) -> tx(JUP, JUQ).
set_nonce_tracker(Tx, Tracker) ->
{tx,
erlang:element(2, Tx),
erlang:element(3, Tx),
erlang:element(4, Tx),
erlang:element(5, Tx),
erlang:element(6, Tx),
erlang:element(7, Tx),
erlang:element(8, Tx),
Tracker}.
-file("src/trove/internal/tx.gleam", 66).
?DOC(false).
-spec get_tree(tx(JUX, JUY)) -> trove@internal@btree:btree(JUX, JUY).
get_tree(Tx) ->
erlang:element(2, Tx).
-file("src/trove/internal/tx.gleam", 71).
?DOC(false).
-spec get(tx(JVD, JVE), JVD) -> gleam@option:option(JVE).
get(Tx, Key) ->
Result@1 = case trove@internal@btree:lookup(
erlang:element(2, Tx),
erlang:element(3, Tx),
Key,
erlang:element(4, Tx),
erlang:element(5, Tx),
erlang:element(6, Tx)
) of
{ok, Result} -> Result;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"trove/internal/tx"/utf8>>,
function => <<"get"/utf8>>,
line => 72,
value => _assert_fail,
start => 1821,
'end' => 2025,
pattern_start => 1832,
pattern_end => 1842})
end,
Result@1.
-file("src/trove/internal/tx.gleam", 85).
?DOC(false).
-spec put(tx(JVI, JVJ), JVI, JVJ) -> tx(JVI, JVJ).
put(Tx, Key, Value) ->
New_tree@1 = case trove@internal@btree:insert(
erlang:element(2, Tx),
erlang:element(3, Tx),
Key,
Value,
erlang:element(4, Tx),
erlang:element(5, Tx),
erlang:element(6, Tx)
) of
{ok, New_tree} -> New_tree;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"trove/internal/tx"/utf8>>,
function => <<"put"/utf8>>,
line => 86,
value => _assert_fail,
start => 2187,
'end' => 2413,
pattern_start => 2198,
pattern_end => 2210})
end,
New_nonce = erlang:make_ref(),
case erlang:element(9, Tx) of
{some, Subject} ->
gleam@erlang@process:send(Subject, New_nonce);
none ->
nil
end,
{tx,
New_tree@1,
erlang:element(3, Tx),
erlang:element(4, Tx),
erlang:element(5, Tx),
erlang:element(6, Tx),
erlang:element(7, Tx),
New_nonce,
erlang:element(9, Tx)}.
-file("src/trove/internal/tx.gleam", 105).
?DOC(false).
-spec delete(tx(JVO, JVP), JVO) -> tx(JVO, JVP).
delete(Tx, Key) ->
New_tree@1 = case trove@internal@btree:delete(
erlang:element(2, Tx),
erlang:element(3, Tx),
Key,
erlang:element(4, Tx),
erlang:element(6, Tx)
) of
{ok, New_tree} -> New_tree;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"trove/internal/tx"/utf8>>,
function => <<"delete"/utf8>>,
line => 106,
value => _assert_fail,
start => 2736,
'end' => 2907,
pattern_start => 2747,
pattern_end => 2759})
end,
New_nonce = erlang:make_ref(),
case erlang:element(9, Tx) of
{some, Subject} ->
gleam@erlang@process:send(Subject, New_nonce);
none ->
nil
end,
{tx,
New_tree@1,
erlang:element(3, Tx),
erlang:element(4, Tx),
erlang:element(5, Tx),
erlang:element(6, Tx),
erlang:element(7, Tx),
New_nonce,
erlang:element(9, Tx)}.