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

feat(tpl): support `:n` SQL parameters

Andrew Mayorov 2 лет назад
Родитель
Сommit
7bb995f0c6

+ 4 - 2
apps/emqx_connector/src/emqx_connector_template_sql.erl

@@ -34,7 +34,7 @@
 -type values() :: [emqx_connector_sql:value()].
 
 -type parse_opts() :: #{
-    parameters => '$n' | '?',
+    parameters => '$n' | ':n' | '?',
     % Inherited from `emqx_connector_template:parse_opts()`
     strip_double_quote => boolean()
 }.
@@ -116,7 +116,9 @@ mk_prepared_statement(Template, Opts) ->
 mk_replace('?', Acc) ->
     {"?", Acc};
 mk_replace('$n', N) ->
-    {"$" ++ integer_to_list(N), N + 1}.
+    {"$" ++ integer_to_list(N), N + 1};
+mk_replace(':n', N) ->
+    {":" ++ integer_to_list(N), N + 1}.
 
 %% @doc Render a row template into a list of SQL values.
 %% An _SQL value_ is a vaguely defined concept here, it is something that's considered

+ 7 - 0
apps/emqx_connector/test/emqx_connector_template_SUITE.erl

@@ -188,6 +188,13 @@ t_parse_sql_prepstmt_n(_) ->
         emqx_connector_template_sql:render_prepstmt_strict(RowTemplate, Bindings)
     ).
 
+t_parse_sql_prepstmt_colon(_) ->
+    {PrepareStatement, _RowTemplate} =
+        emqx_connector_template_sql:parse_prepstmt(<<"a=${a},b=${b},c=${c},d=${d}">>, #{
+            parameters => ':n'
+        }),
+    ?assertEqual(<<"a=:1,b=:2,c=:3,d=:4">>, bin(PrepareStatement)).
+
 t_parse_sql_prepstmt_partial_ph(_) ->
     Bindings = #{a => <<"1">>, b => 1, c => 1.0, d => #{d1 => <<"hi">>}},
     {PrepareStatement, RowTemplate} =