Merge pull request #12657 from kjellwinblad/kjell/rule_engine/fix/fun_calls_as_array_items/EMQX-11953

fix(rule SQL): allow expressions as array items
This commit is contained in:
Kjell Winblad 2024-03-08 09:39:46 +01:00 committed by GitHub
commit 6054499607
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 36 additions and 2 deletions

View File

@ -102,6 +102,7 @@ groups() ->
t_sqlparse_array_index_3, t_sqlparse_array_index_3,
t_sqlparse_array_index_4, t_sqlparse_array_index_4,
t_sqlparse_array_index_5, t_sqlparse_array_index_5,
t_sqlparse_array_with_expressions,
t_sqlparse_select_matadata_1, t_sqlparse_select_matadata_1,
t_sqlparse_array_range_1, t_sqlparse_array_range_1,
t_sqlparse_array_range_2, 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) -> t_sqlparse_select_matadata_1(_Config) ->
%% array with json string payload: %% array with json string payload:
Sql0 = Sql0 =

View File

@ -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/#"
```

View File

@ -65,7 +65,7 @@ defmodule EMQXUmbrella.MixProject do
# maybe forbid to fetch quicer # maybe forbid to fetch quicer
{:emqtt, {:emqtt,
github: "emqx/emqtt", tag: "1.10.1", override: true, system_env: maybe_no_quic_env()}, 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"}, {:observer_cli, "1.7.1"},
{:system_monitor, github: "ieQu1/system_monitor", tag: "3.0.3"}, {:system_monitor, github: "ieQu1/system_monitor", tag: "3.0.3"},
{:telemetry, "1.1.0"}, {:telemetry, "1.1.0"},

View File

@ -91,7 +91,7 @@
{replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.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"}}}, {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}},
{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.1"}}}, {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 % NOTE: depends on recon 2.5.x
{observer_cli, "1.7.1"}, {observer_cli, "1.7.1"},
{system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}}, {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}},