Просмотр исходного кода

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
Kjell Winblad 2 лет назад
Родитель
Сommit
6054499607
4 измененных файлов с 36 добавлено и 2 удалено
  1. 25 0
      apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl
  2. 9 0
      changes/ce/fix-12657.en.md
  3. 1 1
      mix.exs
  4. 1 1
      rebar.config

+ 25 - 0
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 =

+ 9 - 0
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/#"
+```

+ 1 - 1
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"},

+ 1 - 1
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"}}},