fix(dynamo): fixed the keys checking for Dynamo

This commit is contained in:
firest 2024-04-28 16:54:32 +08:00
parent a3320ab51b
commit d6c203b4fd
1 changed files with 19 additions and 15 deletions

View File

@ -134,20 +134,10 @@ on_add_channel(
create_channel_state(
#{parameters := Conf} = _ChannelConfig
) ->
Keys = maps:with([hash_key, range_key], Conf),
Keys1 = maps:fold(
fun(K, V, Acc) ->
Acc#{K := erlang:binary_to_existing_atom(V)}
end,
Keys,
Keys
),
Base = maps:without([template, hash_key, range_key], Conf),
Base1 = maps:merge(Base, Keys1),
Base = maps:without([template], Conf),
Templates = parse_template_from_conf(Conf),
State = Base1#{
State = Base#{
templates => Templates
},
{ok, State}.
@ -318,12 +308,12 @@ get_query_tuple([InsertQuery | _]) ->
ensuare_dynamo_keys({_, Data} = Query, State) when is_map(Data) ->
ensuare_dynamo_keys([Query], State);
ensuare_dynamo_keys([{_, Data} | _] = Queries, State) when is_map(Data) ->
Keys = maps:to_list(maps:with([hash_key, range_key], State)),
Keys = maps:values(maps:with([hash_key, range_key], State)),
lists:all(
fun({_, Query}) ->
lists:all(
fun({_, Key}) ->
maps:is_key(Key, Query)
fun(Key) ->
is_dynamo_key_existing(Key, Query)
end,
Keys
)
@ -371,3 +361,17 @@ get_host_info(Server) ->
redact(Data) ->
emqx_utils:redact(Data, fun(Any) -> Any =:= aws_secret_access_key end).
is_dynamo_key_existing(Bin, Query) when is_binary(Bin) ->
case maps:is_key(Bin, Query) of
true ->
true;
_ ->
try
Key = erlang:binary_to_existing_atom(Bin),
maps:is_key(Key, Query)
catch
_:_ ->
false
end
end.