From 705ed0ce7b786d6f0fee98ad2025aa818090cdee Mon Sep 17 00:00:00 2001 From: JimMoen Date: Fri, 8 Oct 2021 14:40:27 +0800 Subject: [PATCH] refactor(mgmt_api): Fuzzy filter using `select_table`. --- apps/emqx_management/src/emqx_mgmt_api.erl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/emqx_management/src/emqx_mgmt_api.erl b/apps/emqx_management/src/emqx_mgmt_api.erl index b455ca431..6440a7365 100644 --- a/apps/emqx_management/src/emqx_mgmt_api.erl +++ b/apps/emqx_management/src/emqx_mgmt_api.erl @@ -219,6 +219,22 @@ traverse_n_by_one(Tab, K, MatchFun, Start, Limit, Acc) -> end end. +select_table(Tab, {Ms, FuzzyFilterFun}, ?FRESH_SELECT, Limit, FmtFun) + when is_function(FuzzyFilterFun) andalso Limit > 0 -> + case ets:select(Tab, Ms, Limit) of + '$end_of_table' -> + {[], ?FRESH_SELECT}; + {RawResult, NContinuation} -> + {lists:map(FmtFun, lists:reverse(FuzzyFilterFun(RawResult))), NContinuation} + end; +select_table(_Tab, {_Ms, FuzzyFilterFun}, Continuation, _Limit, FmtFun) + when is_function(FuzzyFilterFun) -> + case ets:select(Continuation) of + '$end_of_table' -> + {[], ?FRESH_SELECT}; + {RawResult, NContinuation} -> + {lists:map(FmtFun, lists:reverse(FuzzyFilterFun(RawResult))), NContinuation} + end; select_table(Tab, Ms, ?FRESH_SELECT, Limit, FmtFun) when Limit > 0 -> case ets:select(Tab, Ms, Limit) of