diff --git a/apps/emqx_rule_engine/src/emqx_rule_sqltester.erl b/apps/emqx_rule_engine/src/emqx_rule_sqltester.erl index a3d9d5ebe..c9be82127 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_sqltester.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_sqltester.erl @@ -115,11 +115,13 @@ test(#{sql := Sql, context := Context}) -> true -> %% test if the topic matches the topic filters in the rule case emqx_topic:match_any(InTopic, EventTopics) of - true -> test_rule(Sql, Select, Context, EventTopics); - false -> {error, nomatch} + true -> + test_rule(Sql, Select, Context, EventTopics); + false -> + {error, nomatch} end; false -> - case lists:member(InTopic, EventTopics) of + case emqx_topic:match_any(InTopic, EventTopics) of true -> %% the rule is for both publish and events, test it directly test_rule(Sql, Select, Context, EventTopics); diff --git a/apps/emqx_rule_engine/test/emqx_rule_engine_api_2_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_engine_api_2_SUITE.erl index b2d2fdf86..b6f3eb307 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_engine_api_2_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_engine_api_2_SUITE.erl @@ -332,6 +332,38 @@ t_rule_test_smoke(_Config) -> } ], MultipleFrom = [ + #{ + expected => #{code => 200}, + input => + #{ + <<"context">> => + #{ + <<"clientid">> => <<"c_emqx">>, + <<"event_type">> => <<"message_publish">>, + <<"qos">> => 1, + <<"topic">> => <<"t/a">>, + <<"username">> => <<"u_emqx">> + }, + <<"sql">> => + <<"SELECT\n *\nFROM\n \"t/#\", \"$bridges/mqtt:source\" ">> + } + }, + #{ + expected => #{code => 200}, + input => + #{ + <<"context">> => + #{ + <<"clientid">> => <<"c_emqx">>, + <<"event_type">> => <<"message_publish">>, + <<"qos">> => 1, + <<"topic">> => <<"t/a">>, + <<"username">> => <<"u_emqx">> + }, + <<"sql">> => + <<"SELECT\n *\nFROM\n \"t/#\", \"$sources/mqtt:source\" ">> + } + }, #{ expected => #{code => 200}, input => @@ -395,6 +427,7 @@ do_t_rule_test_smoke(#{input := Input, expected := #{code := ExpectedCode}} = Ca {true, #{ expected => ExpectedCode, hint => maps:get(hint, Case, <<>>), + input => Input, got => Code, resp_body => Body }} diff --git a/changes/ce/fix-13527.en.md b/changes/ce/fix-13527.en.md new file mode 100644 index 000000000..0c3324e41 --- /dev/null +++ b/changes/ce/fix-13527.en.md @@ -0,0 +1 @@ +Fixed an issue where running a SQL test in Rule Engine for the Message Publish event when a `$bridges/...` source was included in the `FROM` clause would always yield no results.