test(rulesql): num funcs type cases
This commit is contained in:
parent
32376c7cf9
commit
27e19da066
|
@ -236,8 +236,27 @@ t_sqlselect_00(_Config) ->
|
||||||
#{<<"rawsql">> => Sql3,
|
#{<<"rawsql">> => Sql3,
|
||||||
<<"ctx">> =>
|
<<"ctx">> =>
|
||||||
#{<<"payload">> => <<"">>,
|
#{<<"payload">> => <<"">>,
|
||||||
<<"topic">> => <<"t/a">>}})).
|
<<"topic">> => <<"t/a">>}})),
|
||||||
|
|
||||||
|
Sql4 = "select payload.msg1 + payload.msg2 as msg "
|
||||||
|
"from \"t/#\" ",
|
||||||
|
?assertMatch({ok,#{<<"msg">> := <<"hello world">>}},
|
||||||
|
emqx_rule_sqltester:test(
|
||||||
|
#{<<"rawsql">> => Sql4,
|
||||||
|
<<"ctx">> =>
|
||||||
|
#{<<"payload">> => <<"{\"msg1\": \"hello\", \"msg2\": \" world\"}">>,
|
||||||
|
<<"topic">> => <<"t/1">>}})),
|
||||||
|
|
||||||
|
Sql5 = "select payload.msg1 + payload.msg2 as msg "
|
||||||
|
"from \"t/#\" ",
|
||||||
|
?assertMatch({error, {select_and_transform_error, {error, unsupported_type_implicit_conversion, _ST}}},
|
||||||
|
emqx_rule_sqltester:test(
|
||||||
|
#{<<"rawsql">> => Sql5,
|
||||||
|
<<"ctx">> =>
|
||||||
|
#{<<"payload">> => <<"{\"msg1\": \"hello\", \"msg2\": 1}">>,
|
||||||
|
<<"topic">> => <<"t/1">>}})).
|
||||||
|
|
||||||
|
%% Verify SELECT with and with 'WHERE'
|
||||||
t_sqlselect_01(_Config) ->
|
t_sqlselect_01(_Config) ->
|
||||||
ok = emqx_rule_engine:load_providers(),
|
ok = emqx_rule_engine:load_providers(),
|
||||||
TopicRule1 = create_simple_repub_rule(
|
TopicRule1 = create_simple_repub_rule(
|
||||||
|
@ -312,7 +331,50 @@ t_sqlselect_02(_Config) ->
|
||||||
emqtt:stop(Client),
|
emqtt:stop(Client),
|
||||||
emqx_rule_registry:remove_rule(TopicRule1).
|
emqx_rule_registry:remove_rule(TopicRule1).
|
||||||
|
|
||||||
|
t_sqlselect_03(_Config) ->
|
||||||
|
%% Verify SELECT with and with 'WHERE' and `+` `=` and `or` condition in 'WHERE' clause
|
||||||
|
ok = emqx_rule_engine:load_providers(),
|
||||||
|
TopicRule1 = create_simple_repub_rule(
|
||||||
|
<<"t2">>,
|
||||||
|
"SELECT * "
|
||||||
|
"FROM \"t3/#\", \"t1\" "
|
||||||
|
"WHERE payload.x + payload.y = 2 or payload.x + payload.y = \"11\""),
|
||||||
|
{ok, Client} = emqtt:start_link([{username, <<"emqx">>}]),
|
||||||
|
{ok, _} = emqtt:connect(Client),
|
||||||
|
{ok, _, _} = emqtt:subscribe(Client, <<"t2">>, 0),
|
||||||
|
emqtt:publish(Client, <<"t1">>, <<"{\"x\":1, \"y\":1}">>, 0),
|
||||||
|
ct:sleep(100),
|
||||||
|
receive {publish, #{topic := T1, payload := Payload0}} ->
|
||||||
|
?assertEqual(<<"t2">>, T1),
|
||||||
|
?assertEqual(<<"{\"x\":1, \"y\":1}">>, Payload0)
|
||||||
|
after 1000 ->
|
||||||
|
ct:fail(wait_for_t2)
|
||||||
|
end,
|
||||||
|
|
||||||
|
receive {publish, #{topic := T2, payload := Payload1}} ->
|
||||||
|
?assertEqual(<<"t2">>, T2),
|
||||||
|
?assertEqual(<<"{\"x\":\"1\", \"y\":\"1\"}">>, Payload1)
|
||||||
|
after 1000 ->
|
||||||
|
ct:fail(wait_for_t2)
|
||||||
|
end,
|
||||||
|
|
||||||
|
emqtt:publish(Client, <<"t1">>, <<"{\"x\":1, \"y\":2}">>, 0),
|
||||||
|
receive {publish, #{topic := <<"t2">>, payload := Payload2}} ->
|
||||||
|
ct:fail({unexpected_t2, Payload2})
|
||||||
|
after 1000 ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
|
||||||
|
emqtt:publish(Client, <<"t3/a">>, <<"{\"x\":1, \"y\":1}">>, 0),
|
||||||
|
receive {publish, #{topic := T3, payload := Payload3}} ->
|
||||||
|
?assertEqual(<<"t2">>, T3),
|
||||||
|
?assertEqual(<<"{\"x\":1, \"y\":1}">>, Payload3)
|
||||||
|
after 1000 ->
|
||||||
|
ct:fail(wait_for_t2)
|
||||||
|
end,
|
||||||
|
|
||||||
|
emqtt:stop(Client),
|
||||||
|
emqx_rule_registry:remove_rule(TopicRule1).
|
||||||
|
|
||||||
t_sqlselect_1(_Config) ->
|
t_sqlselect_1(_Config) ->
|
||||||
ok = emqx_rule_engine:load_providers(),
|
ok = emqx_rule_engine:load_providers(),
|
||||||
|
|
Loading…
Reference in New Issue