diff --git a/src/emqx_trie.erl b/src/emqx_trie.erl index 1c6e3be58..2a23beeb1 100644 --- a/src/emqx_trie.erl +++ b/src/emqx_trie.erl @@ -141,8 +141,12 @@ compact(Words) -> false -> Words end. +%% join split words into compacted segments +%% each segment ends with one wildcard word +%% e.g. %% a/b/c/+/d/# => [a/b/c/+, d/#] %% a/+/+/b => [a/+, +, b] +%% a/+/+/+/+/b => [a/+, +, +, +, b] do_compact(Words) -> do_compact(Words, empty, []). @@ -317,7 +321,10 @@ do_compact_test() -> ?assertEqual([<<"/+">>], do_compact(words(<<"/+">>))), ?assertEqual([<<"/#">>], do_compact(words(<<"/#">>))), ?assertEqual([<<"a/b/+">>, <<"c">>], do_compact(words(<<"a/b/+/c">>))), - ?assertEqual([<<"a/+">>, <<"+">>, <<"b">>], do_compact(words(<<"a/+/+/b">>))). + ?assertEqual([<<"a/+">>, <<"+">>, <<"b">>], do_compact(words(<<"a/+/+/b">>))), + ?assertEqual([<<"a/+">>, <<"+">>, <<"+">>, <<"+">>, <<"b">>], + do_compact(words(<<"a/+/+/+/+/b">>))), + ok. clear_tables() -> mnesia:clear_table(?TRIE).