Преглед изворни кода

fix(rule): compare to null variables should return false

Shawn пре 4 година
родитељ
комит
fbeba39f0d

+ 50 - 36
apps/emqx_rule_engine/src/emqx_rule_engine.appup.src

@@ -3,76 +3,90 @@
   [
    {"4.3.6",
     [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.5",
     [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.4",
-    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.3",
-    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.2",
-    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
-      {apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
-      {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.1",
-    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
-      {apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.0",
-    [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
-      {apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {<<".*">>, []}
   ],
   [
    {"4.3.6",
     [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.5",
     [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.4",
-    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.3",
-    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.2",
-    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
-      {apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
-      {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.1",
-    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
-      {apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {"4.3.0",
-    [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
-      {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
-      {apply,{emqx_stats,cancel_update,[rule_registery_stats]}},
-      {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
+    , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}
+    , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}
+    , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}
     ]},
    {<<".*">>, []}
   ]

+ 4 - 0
apps/emqx_rule_engine/src/emqx_rule_runtime.erl

@@ -204,6 +204,10 @@ match_conditions({}, _Data) ->
     true.
 
 %% comparing numbers against strings
+compare(Op, undefined, undefined) ->
+    do_compare(Op, undefined, undefined);
+compare(_Op, L, R) when L == undefined; R == undefined ->
+    false;
 compare(Op, L, R) when is_number(L), is_binary(R) ->
     do_compare(Op, L, number(R));
 compare(Op, L, R) when is_binary(L), is_number(R) ->