Packages

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

Current section

Files

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

src/trove@internal@snapshot.erl

-module(trove@internal@snapshot).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/trove/internal/snapshot.gleam").
-export([new/6, close/1, get/2, range/4, get_in/3, range_in/5]).
-export_type([keyspace_view/0, snapshot/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_view() :: {keyspace_view,
trove@internal@btree:btree(bitstring(), bitstring()),
fun((bitstring(), bitstring()) -> gleam@order:order())}.
-opaque snapshot(JWO, JWP) :: {snapshot,
trove@internal@btree:btree(JWO, JWP),
trove@internal@store:store(),
trove@codec:codec(JWO),
trove@codec:codec(JWP),
fun((JWO, JWO) -> gleam@order:order()),
gleam@dict:dict(binary(), keyspace_view())}.
-file("src/trove/internal/snapshot.gleam", 39).
?DOC(false).
-spec new(
trove@internal@btree:btree(JWQ, JWR),
trove@internal@store:store(),
trove@codec:codec(JWQ),
trove@codec:codec(JWR),
fun((JWQ, JWQ) -> gleam@order:order()),
gleam@dict:dict(binary(), keyspace_view())
) -> snapshot(JWQ, JWR).
new(Tree, Store, Key_codec, Value_codec, Key_compare, Keyspaces) ->
{snapshot, Tree, Store, Key_codec, Value_codec, Key_compare, Keyspaces}.
-file("src/trove/internal/snapshot.gleam", 51).
?DOC(false).
-spec close(snapshot(any(), any())) -> nil.
close(Snapshot) ->
case trove@internal@store:close(erlang:element(3, Snapshot)) of
{ok, nil} ->
nil;
{error, Reason} ->
gleam_stdlib:println_error(
<<"[trove] failed to close snapshot store: "/utf8,
(trove@internal@store:error_to_string(Reason))/binary>>
)
end.
-file("src/trove/internal/snapshot.gleam", 63).
?DOC(false).
-spec get(snapshot(JXE, JXF), JXE) -> {ok, JXF} | {error, nil}.
get(Snapshot, Key) ->
Result@1 = case trove@internal@btree:lookup(
erlang:element(2, Snapshot),
erlang:element(3, Snapshot),
Key,
erlang:element(4, Snapshot),
erlang:element(5, Snapshot),
erlang:element(6, Snapshot)
) 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/snapshot"/utf8>>,
function => <<"get"/utf8>>,
line => 64,
value => _assert_fail,
start => 1972,
'end' => 2206,
pattern_start => 1983,
pattern_end => 1993})
end,
gleam@option:to_result(Result@1, nil).
-file("src/trove/internal/snapshot.gleam", 77).
?DOC(false).
-spec range(
snapshot(JXK, JXL),
gleam@option:option(trove@range:bound(JXK)),
gleam@option:option(trove@range:bound(JXK)),
trove@range:direction()
) -> gleam@yielder:yielder({JXK, JXL}).
range(Snapshot, Min, Max, Direction) ->
trove@internal@btree@range:'query'(
erlang:element(2, Snapshot),
erlang:element(3, Snapshot),
Min,
Max,
Direction,
erlang:element(4, Snapshot),
erlang:element(5, Snapshot),
erlang:element(6, Snapshot)
).
-file("src/trove/internal/snapshot.gleam", 96).
?DOC(false).
-spec get_in(snapshot(any(), any()), binary(), bitstring()) -> {ok, bitstring()} |
{error, nil}.
get_in(Snapshot, Name, Key_bytes) ->
View@1 = case gleam_stdlib:map_get(erlang:element(7, Snapshot), Name) of
{ok, View} -> View;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"trove/internal/snapshot"/utf8>>,
function => <<"get_in"/utf8>>,
line => 101,
value => _assert_fail,
start => 2963,
'end' => 3019,
pattern_start => 2974,
pattern_end => 2982})
end,
Result@1 = case trove@internal@btree:lookup(
erlang:element(2, View@1),
erlang:element(3, Snapshot),
Key_bytes,
trove@codec:bit_array(),
trove@codec:bit_array(),
erlang:element(3, View@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/snapshot"/utf8>>,
function => <<"get_in"/utf8>>,
line => 102,
value => _assert_fail@1,
start => 3022,
'end' => 3251,
pattern_start => 3033,
pattern_end => 3043})
end,
gleam@option:to_result(Result@1, nil).
-file("src/trove/internal/snapshot.gleam", 115).
?DOC(false).
-spec range_in(
snapshot(any(), any()),
binary(),
gleam@option:option(trove@range:bound(bitstring())),
gleam@option:option(trove@range:bound(bitstring())),
trove@range:direction()
) -> gleam@yielder:yielder({bitstring(), bitstring()}).
range_in(Snapshot, Name, Min, Max, Direction) ->
View@1 = case gleam_stdlib:map_get(erlang:element(7, Snapshot), Name) of
{ok, View} -> View;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"trove/internal/snapshot"/utf8>>,
function => <<"range_in"/utf8>>,
line => 122,
value => _assert_fail,
start => 3622,
'end' => 3678,
pattern_start => 3633,
pattern_end => 3641})
end,
trove@internal@btree@range:'query'(
erlang:element(2, View@1),
erlang:element(3, Snapshot),
Min,
Max,
Direction,
trove@codec:bit_array(),
trove@codec:bit_array(),
erlang:element(3, View@1)
).