From 0cf96e71989483b5d4aa63adfa34b233205b0d44 Mon Sep 17 00:00:00 2001 From: martinsumner Date: Wed, 9 Nov 2016 00:13:52 +0000 Subject: [PATCH] Removed daft last function from SFT --- src/leveled_sft.erl | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/leveled_sft.erl b/src/leveled_sft.erl index c204888..e580a65 100644 --- a/src/leveled_sft.erl +++ b/src/leveled_sft.erl @@ -722,13 +722,8 @@ fetch_block(Handle, LengthList, BlockNmb, StartOfSlot) -> binary_to_term(BlockToCheckBin). %% Need to deal with either Key or {next, Key} -get_nearestkey(KVList, all) -> - case KVList of - [] -> - not_found; - [H|_Tail] -> - H - end; +get_nearestkey([H|_Tail], all) -> + H; get_nearestkey(KVList, Key) -> case Key of {next, K} -> @@ -1031,16 +1026,16 @@ create_slot(KL1, KL2, LevelR, BlockCount, SegLists, SerialisedSlot, LengthList, {null, LSN, HSN, LastKey, Status}; {null, _} -> [NewLowKeyV|_] = BlockKeyList, + NewLastKey = lists:last([{keyonly, LastKey}|BlockKeyList]), {leveled_codec:strip_to_keyonly(NewLowKeyV), min(LSN, LSNb), max(HSN, HSNb), - leveled_codec:strip_to_keyonly(last(BlockKeyList, - {last, LastKey})), + leveled_codec:strip_to_keyonly(NewLastKey), Status}; {_, _} -> + NewLastKey = lists:last([{keyonly, LastKey}|BlockKeyList]), {LowKey, min(LSN, LSNb), max(HSN, HSNb), - leveled_codec:strip_to_keyonly(last(BlockKeyList, - {last, LastKey})), + leveled_codec:strip_to_keyonly(NewLastKey), Status} end, SerialisedBlock = serialise_block(BlockKeyList), @@ -1050,13 +1045,6 @@ create_slot(KL1, KL2, LevelR, BlockCount, SegLists, SerialisedSlot, LengthList, SerialisedSlot2, LengthList ++ [BlockLength], TrackingMetadata). - -last([], {last, LastKey}) -> {keyonly, LastKey}; -last([E|Es], PrevLast) -> last(E, Es, PrevLast). - -last(_, [E|Es], PrevLast) -> last(E, Es, PrevLast); -last(E, [], _) -> E. - serialise_block(BlockKeyList) -> term_to_binary(BlockKeyList, [{compressed, ?COMPRESSION_LEVEL}]). @@ -2023,6 +2011,13 @@ filename_test() -> "../tmp/subdir/file_name.sft"}, generate_filenames(FN3)). +empty_file_test() -> + {ok, Pid, _Reply} = sft_new("../test/emptyfile.pnd", [], [], 1), + ?assertMatch(not_present, sft_get(Pid, "Key1")), + ?assertMatch([], sft_getkvrange(Pid, all, all, 16)), + ok = sft_clear(Pid). + + nonsense_coverage_test() -> {ok, Pid} = gen_fsm:start(?MODULE, [], []), undefined = gen_fsm:sync_send_all_state_event(Pid, nonsense),