Current section
Files
Jump to
Current section
Files
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/6, set_token/2, token/1, nonce/1, set_nonce_tracker/2, get_tree/1, get_other_trees/1, get/2, get_in/3, put/3, delete/2, put_in/4, delete_in/3]).
-export_type([keyspace_entry/0, 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).
-type keyspace_entry() :: {keyspace_entry,
trove@internal@btree:btree(bitstring(), bitstring()),
fun((bitstring(), bitstring()) -> gleam@order:order())}.
-opaque tx(KBA, KBB) :: {tx,
trove@internal@btree:btree(KBA, KBB),
trove@internal@store:store(),
trove@codec:codec(KBA),
trove@codec:codec(KBB),
fun((KBA, KBA) -> gleam@order:order()),
gleam@erlang@reference:reference_(),
gleam@erlang@reference:reference_(),
gleam@option:option(gleam@erlang@process:subject(gleam@erlang@reference:reference_())),
gleam@dict:dict(binary(), keyspace_entry())}.
-file("src/trove/internal/tx.gleam", 39).
?DOC(false).
-spec new(
trove@internal@btree:btree(KBC, KBD),
trove@internal@store:store(),
trove@codec:codec(KBC),
trove@codec:codec(KBD),
fun((KBC, KBC) -> gleam@order:order()),
gleam@dict:dict(binary(), keyspace_entry())
) -> tx(KBC, KBD).
new(Tree, Store, Key_codec, Value_codec, Key_compare, Other_trees) ->
{tx,
Tree,
Store,
Key_codec,
Value_codec,
Key_compare,
erlang:make_ref(),
erlang:make_ref(),
none,
Other_trees}.
-file("src/trove/internal/tx.gleam", 60).
?DOC(false).
-spec set_token(tx(KBM, KBN), gleam@erlang@reference:reference_()) -> tx(KBM, KBN).
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),
erlang:element(10, Tx)}.
-file("src/trove/internal/tx.gleam", 64).
?DOC(false).
-spec token(tx(any(), any())) -> gleam@erlang@reference:reference_().
token(Tx) ->
erlang:element(7, Tx).
-file("src/trove/internal/tx.gleam", 68).
?DOC(false).
-spec nonce(tx(any(), any())) -> gleam@erlang@reference:reference_().
nonce(Tx) ->
erlang:element(8, Tx).
-file("src/trove/internal/tx.gleam", 72).
?DOC(false).
-spec set_nonce_tracker(
tx(KCA, KCB),
gleam@option:option(gleam@erlang@process:subject(gleam@erlang@reference:reference_()))
) -> tx(KCA, KCB).
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,
erlang:element(10, Tx)}.
-file("src/trove/internal/tx.gleam", 80).
?DOC(false).
-spec get_tree(tx(KCI, KCJ)) -> trove@internal@btree:btree(KCI, KCJ).
get_tree(Tx) ->
erlang:element(2, Tx).
-file("src/trove/internal/tx.gleam", 85).
?DOC(false).
-spec get_other_trees(tx(any(), any())) -> gleam@dict:dict(binary(), keyspace_entry()).
get_other_trees(Tx) ->
erlang:element(10, Tx).
-file("src/trove/internal/tx.gleam", 90).
?DOC(false).
-spec get(tx(KCU, KCV), KCU) -> {ok, KCV} | {error, nil}.
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 => 91,
value => _assert_fail,
start => 2490,
'end' => 2694,
pattern_start => 2501,
pattern_end => 2511})
end,
gleam@option:to_result(Result@1, nil).
-file("src/trove/internal/tx.gleam", 132).
?DOC(false).
-spec get_in(tx(any(), any()), binary(), bitstring()) -> {ok, bitstring()} |
{error, nil}.
get_in(Tx, Name, Key_bytes) ->
Entry@1 = case gleam_stdlib:map_get(erlang:element(10, Tx), Name) of
{ok, Entry} -> Entry;
_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_in"/utf8>>,
line => 137,
value => _assert_fail,
start => 3691,
'end' => 3744,
pattern_start => 3702,
pattern_end => 3711})
end,
Result@1 = case trove@internal@btree:lookup(
erlang:element(2, Entry@1),
erlang:element(3, Tx),
Key_bytes,
trove@codec:bit_array(),
trove@codec:bit_array(),
erlang:element(3, Entry@1)
) of
{ok, Result} -> Result;
_assert_fail@1 ->
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_in"/utf8>>,
line => 138,
value => _assert_fail@1,
start => 3747,
'end' => 3972,
pattern_start => 3758,
pattern_end => 3768})
end,
gleam@option:to_result(Result@1, nil).
-file("src/trove/internal/tx.gleam", 194).
?DOC(false).
-spec bump_nonce(tx(any(), any())) -> gleam@erlang@reference:reference_().
bump_nonce(Tx) ->
New_nonce = erlang:make_ref(),
case erlang:element(9, Tx) of
{some, Subject} ->
gleam@erlang@process:send(Subject, New_nonce);
none ->
nil
end,
New_nonce.
-file("src/trove/internal/tx.gleam", 104).
?DOC(false).
-spec put(tx(KDA, KDB), KDA, KDB) -> tx(KDA, KDB).
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 => 105,
value => _assert_fail,
start => 2879,
'end' => 3105,
pattern_start => 2890,
pattern_end => 2902})
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),
bump_nonce(Tx),
erlang:element(9, Tx),
erlang:element(10, Tx)}.
-file("src/trove/internal/tx.gleam", 119).
?DOC(false).
-spec delete(tx(KDG, KDH), KDG) -> tx(KDG, KDH).
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 => 120,
value => _assert_fail,
start => 3285,
'end' => 3456,
pattern_start => 3296,
pattern_end => 3308})
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),
bump_nonce(Tx),
erlang:element(9, Tx),
erlang:element(10, Tx)}.
-file("src/trove/internal/tx.gleam", 152).
?DOC(false).
-spec put_in(tx(KDS, KDT), binary(), bitstring(), bitstring()) -> tx(KDS, KDT).
put_in(Tx, Name, Key_bytes, Value_bytes) ->
Entry@1 = case gleam_stdlib:map_get(erlang:element(10, Tx), Name) of
{ok, Entry} -> Entry;
_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_in"/utf8>>,
line => 158,
value => _assert_fail,
start => 4237,
'end' => 4290,
pattern_start => 4248,
pattern_end => 4257})
end,
New_tree@1 = case trove@internal@btree:insert(
erlang:element(2, Entry@1),
erlang:element(3, Tx),
Key_bytes,
Value_bytes,
trove@codec:bit_array(),
trove@codec:bit_array(),
erlang:element(3, Entry@1)
) of
{ok, New_tree} -> New_tree;
_assert_fail@1 ->
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_in"/utf8>>,
line => 159,
value => _assert_fail@1,
start => 4293,
'end' => 4546,
pattern_start => 4304,
pattern_end => 4316})
end,
New_entry = {keyspace_entry, New_tree@1, erlang:element(3, Entry@1)},
New_other = gleam@dict:insert(erlang:element(10, Tx), Name, New_entry),
{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),
bump_nonce(Tx),
erlang:element(9, Tx),
New_other}.
-file("src/trove/internal/tx.gleam", 175).
?DOC(false).
-spec delete_in(tx(KDY, KDZ), binary(), bitstring()) -> tx(KDY, KDZ).
delete_in(Tx, Name, Key_bytes) ->
Entry@1 = case gleam_stdlib:map_get(erlang:element(10, Tx), Name) of
{ok, Entry} -> Entry;
_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_in"/utf8>>,
line => 180,
value => _assert_fail,
start => 4900,
'end' => 4953,
pattern_start => 4911,
pattern_end => 4920})
end,
New_tree@1 = case trove@internal@btree:delete(
erlang:element(2, Entry@1),
erlang:element(3, Tx),
Key_bytes,
trove@codec:bit_array(),
erlang:element(3, Entry@1)
) of
{ok, New_tree} -> New_tree;
_assert_fail@1 ->
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_in"/utf8>>,
line => 181,
value => _assert_fail@1,
start => 4956,
'end' => 5145,
pattern_start => 4967,
pattern_end => 4979})
end,
New_entry = {keyspace_entry, New_tree@1, erlang:element(3, Entry@1)},
New_other = gleam@dict:insert(erlang:element(10, Tx), Name, New_entry),
{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),
bump_nonce(Tx),
erlang:element(9, Tx),
New_other}.