diff --git a/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl b/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl index 66e19efd2..ddc1bb464 100644 --- a/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl +++ b/apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl @@ -274,9 +274,12 @@ list_users(QueryString, #{user_group := UserGroup}) -> %%-------------------------------------------------------------------- %% QueryString to MatchSpec --spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {QString, Fuzzy}) -> - {ms_from_qstring(QString), fuzzy_filter_fun(Fuzzy)}. + #{ + match_spec => ms_from_qstring(QString), + fuzzy_fun => fuzzy_filter_fun(Fuzzy) + }. %% Fuzzy username funcs fuzzy_filter_fun([]) -> diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_mnesia.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_mnesia.erl index 930a03b6a..415d23c25 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_mnesia.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_mnesia.erl @@ -300,9 +300,12 @@ list_users(QueryString, #{user_group := UserGroup}) -> %%-------------------------------------------------------------------- %% QueryString to MatchSpec --spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {QString, FuzzyQString}) -> - {ms_from_qstring(QString), fuzzy_filter_fun(FuzzyQString)}. + #{ + match_spec => ms_from_qstring(QString), + fuzzy_fun => fuzzy_filter_fun(FuzzyQString) + }. %% Fuzzy username funcs fuzzy_filter_fun([]) -> diff --git a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl index 646e6b6fd..d219d07cd 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl @@ -268,9 +268,9 @@ extra_sub_props(Props) -> %%-------------------------------------------------------------------- %% QueryString to MatchSpec --spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {Qs, Fuzzy}) -> - {qs2ms(Qs), fuzzy_filter_fun(Fuzzy)}. + #{match_spec => qs2ms(Qs), fuzzy_fun => fuzzy_filter_fun(Fuzzy)}. qs2ms(Qs) -> {MtchHead, Conds} = qs2ms(Qs, 2, {#{}, []}), diff --git a/apps/emqx_management/src/emqx_mgmt_api.erl b/apps/emqx_management/src/emqx_mgmt_api.erl index ff738a15a..5f8e39f13 100644 --- a/apps/emqx_management/src/emqx_mgmt_api.erl +++ b/apps/emqx_management/src/emqx_mgmt_api.erl @@ -127,8 +127,9 @@ limit(Params) -> {Key :: binary(), Type :: atom | binary | integer | timestamp | ip | ip_port} ]. --type query_to_match_spec_fun() :: - fun((list(), list()) -> {ets:match_spec(), fuzzy_filter_fun()}). +-type query_to_match_spec_fun() :: fun((list(), list()) -> match_spec_and_filter()). + +-type match_spec_and_filter() :: #{match_spec := ets:match_spec(), fuzzy_fun := fuzzy_filter_fun()}. -type fuzzy_filter_fun() :: undefined | {fun(), list()}. @@ -270,7 +271,7 @@ collect_total_from_tail_nodes(Nodes, QueryState, ResultAcc = #{total := TotalAcc %% msfun := query_to_match_spec_fun() %% } init_query_state(Tab, QString, MsFun, _Meta = #{page := Page, limit := Limit}) -> - {Ms, FuzzyFun} = erlang:apply(MsFun, [Tab, QString]), + #{match_spec := Ms, fuzzy_fun := FuzzyFun} = erlang:apply(MsFun, [Tab, QString]), %% assert FuzzyFun type _ = case FuzzyFun of diff --git a/apps/emqx_management/src/emqx_mgmt_api_alarms.erl b/apps/emqx_management/src/emqx_mgmt_api_alarms.erl index 895a5bcf8..80f93ffe4 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_alarms.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_alarms.erl @@ -136,9 +136,9 @@ alarms(delete, _Params) -> %%%============================================================================================== %% internal --spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {_Qs, _Fuzzy}) -> - {[{'$1', [], ['$1']}], undefined}. + #{match_spec => [{'$1', [], ['$1']}], fuzzy_fun => undefined}. format_alarm(WhichNode, Alarm) -> emqx_alarm:format(WhichNode, Alarm). diff --git a/apps/emqx_management/src/emqx_mgmt_api_clients.erl b/apps/emqx_management/src/emqx_mgmt_api_clients.erl index 1f6928f67..588031fc1 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_clients.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_clients.erl @@ -786,9 +786,12 @@ do_unsubscribe(ClientID, Topic) -> %%-------------------------------------------------------------------- %% QueryString to Match Spec --spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {QString, FuzzyQString}) -> - {qs2ms(QString), fuzzy_filter_fun(FuzzyQString)}. + #{ + match_spec => qs2ms(QString), + fuzzy_fun => fuzzy_filter_fun(FuzzyQString) + }. -spec qs2ms(list()) -> ets:match_spec(). qs2ms(Qs) -> diff --git a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl index d39f34207..c05878c6d 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_subscriptions.erl @@ -190,9 +190,9 @@ get_topic(Topic, _) -> %% QueryString to MatchSpec %%-------------------------------------------------------------------- --spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {Qs, Fuzzy}) -> - {gen_match_spec(Qs), fuzzy_filter_fun(Fuzzy)}. + #{match_spec => gen_match_spec(Qs), fuzzy_fun => fuzzy_filter_fun(Fuzzy)}. gen_match_spec(Qs) -> MtchHead = gen_match_spec(Qs, {{'_', '_'}, #{}}), diff --git a/apps/emqx_management/src/emqx_mgmt_api_topics.erl b/apps/emqx_management/src/emqx_mgmt_api_topics.erl index ca707ba20..5e2bd1ea0 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_topics.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_topics.erl @@ -143,8 +143,12 @@ generate_topic(Params = #{topic := Topic}) -> generate_topic(Params) -> Params. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {Qs, _}) -> - {gen_match_spec(Qs, [{{route, '_', '_'}, [], ['$_']}]), undefined}. + #{ + match_spec => gen_match_spec(Qs, [{{route, '_', '_'}, [], ['$_']}]), + fuzzy_fun => undefined + }. gen_match_spec([], Res) -> Res; diff --git a/apps/emqx_modules/src/emqx_delayed.erl b/apps/emqx_modules/src/emqx_delayed.erl index c96e5a452..241ac5a8a 100644 --- a/apps/emqx_modules/src/emqx_delayed.erl +++ b/apps/emqx_modules/src/emqx_delayed.erl @@ -178,9 +178,12 @@ cluster_list(Params) -> fun ?MODULE:format_delayed/2 ). --spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}. +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Table, {_Qs, _Fuzzy}) -> - {[{'$1', [], ['$1']}], undefined}. + #{ + match_spec => [{'$1', [], ['$1']}], + fuzzy_fun => undefined + }. format_delayed(Delayed) -> format_delayed(node(), Delayed). diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl index b4901c1a0..01d819a69 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl @@ -553,12 +553,16 @@ filter_out_request_body(Conf) -> ], maps:without(ExtraConfs, Conf). +-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter(). qs2ms(_Tab, {Qs, Fuzzy}) -> case lists:keytake(from, 1, Qs) of false -> - {generate_match_spec(Qs), fuzzy_match_fun(Fuzzy)}; + #{match_spec => generate_match_spec(Qs), fuzzy_fun => fuzzy_match_fun(Fuzzy)}; {value, {from, '=:=', From}, Ls} -> - {generate_match_spec(Ls), fuzzy_match_fun([{from, '=:=', From} | Fuzzy])} + #{ + match_spec => generate_match_spec(Ls), + fuzzy_fun => fuzzy_match_fun([{from, '=:=', From} | Fuzzy]) + } end. generate_match_spec(Qs) ->