From c206ee37e0056ddeea0d1550fe1269730f99c977 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Wed, 6 Mar 2024 11:47:33 +0100 Subject: [PATCH 1/3] fix(rule SQL): allow expressions as array items Fixes: https://github.com/emqx/emqx/issues/12465 https://emqx.atlassian.net/browse/EMQX-11953 --- .../test/emqx_rule_engine_SUITE.erl | 25 +++++++++++++++++++ mix.exs | 2 +- rebar.config | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) 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/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"}}}, From 2fcd92dcd9703fd4ad3641ba37c2300d8bfd63c5 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Wed, 6 Mar 2024 15:52:42 +0100 Subject: [PATCH 2/3] docs: add changelog entry --- changes/ce/fix-12657.en.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 changes/ce/fix-12657.en.md diff --git a/changes/ce/fix-12657.en.md b/changes/ce/fix-12657.en.md new file mode 100644 index 000000000..eb3cbdd41 --- /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 where allowed). This has not 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/#" +``` From 59f9f6520db0012f27700eab6825cad9c8e84ab0 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Thu, 7 Mar 2024 09:28:57 +0100 Subject: [PATCH 3/3] docs: fix typos in changelog entry Co-authored-by: Thales Macedo Garitezi --- changes/ce/fix-12657.en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes/ce/fix-12657.en.md b/changes/ce/fix-12657.en.md index eb3cbdd41..50ed72acb 100644 --- a/changes/ce/fix-12657.en.md +++ b/changes/ce/fix-12657.en.md @@ -1,4 +1,4 @@ -The rule engine SQL-based language previously did not allow putting any expressions as array elements in array literals (only constants and variable references where allowed). This has not been fixed so that one can use any expressions as array elements. +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: