diff --git a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl index caabe6307..76cc23c0d 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl @@ -102,6 +102,7 @@ groups() -> t_sqlparse_array_index_3, t_sqlparse_array_index_4, t_sqlparse_array_index_5, + t_sqlparse_array_with_expressions, t_sqlparse_select_matadata_1, t_sqlparse_array_range_1, t_sqlparse_array_range_2, @@ -3040,6 +3041,30 @@ t_sqlparse_array_index_5(_Config) -> ) ). +t_sqlparse_array_with_expressions(_Config) -> + Sql = + "select " + " [21 + 21, abs(-abs(-2)), [1 + 1], 4] " + "from \"t/#\" ", + {ok, Res} = + emqx_rule_sqltester:test( + #{ + sql => Sql, + context => #{ + payload => <<"">>, + topic => <<"t/a">> + } + } + ), + ?assert( + lists:any( + fun({_K, V}) -> + V =:= [42, 2, [2], 4] + end, + maps:to_list(Res) + ) + ). + t_sqlparse_select_matadata_1(_Config) -> %% array with json string payload: Sql0 = diff --git a/changes/ce/fix-12657.en.md b/changes/ce/fix-12657.en.md new file mode 100644 index 000000000..50ed72acb --- /dev/null +++ b/changes/ce/fix-12657.en.md @@ -0,0 +1,9 @@ +The rule engine SQL-based language previously did not allow putting any expressions as array elements in array literals (only constants and variable references were allowed). This has now been fixed so that one can use any expressions as array elements. + +The following is now permitted, for example: + +``` +select + [21 + 21, abs(-abs(-2)), [1 + 1], 4] as my_array +from "t/#" +``` diff --git a/mix.exs b/mix.exs index 668459e24..ecf8ed168 100644 --- a/mix.exs +++ b/mix.exs @@ -65,7 +65,7 @@ defmodule EMQXUmbrella.MixProject do # maybe forbid to fetch quicer {:emqtt, github: "emqx/emqtt", tag: "1.10.1", override: true, system_env: maybe_no_quic_env()}, - {:rulesql, github: "emqx/rulesql", tag: "0.1.7"}, + {:rulesql, github: "emqx/rulesql", tag: "0.1.8"}, {:observer_cli, "1.7.1"}, {:system_monitor, github: "ieQu1/system_monitor", tag: "3.0.3"}, {:telemetry, "1.1.0"}, diff --git a/rebar.config b/rebar.config index 5e6bafb15..262dff039 100644 --- a/rebar.config +++ b/rebar.config @@ -91,7 +91,7 @@ {replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.7"}}}, {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}}, {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.1"}}}, - {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.7"}}}, + {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.8"}}}, % NOTE: depends on recon 2.5.x {observer_cli, "1.7.1"}, {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}},