aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2020-12-04 13:03:55 +0100
committerPaweł Chmielowski <pchmielowski@process-one.net>2020-12-04 13:03:55 +0100
commitd34227cae1f67dd33fd97af57298df4646ccb36f (patch)
treebb3ee8a39e4f488c60dda566bd30566b4269d8e0
parentFix more places that needed changes after scram.erl api modifications (diff)
Use specialized upsert with mysql
-rw-r--r--src/ejabberd_sql_pt.erl20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/ejabberd_sql_pt.erl b/src/ejabberd_sql_pt.erl
index d47eeac09..66b2e9c59 100644
--- a/src/ejabberd_sql_pt.erl
+++ b/src/ejabberd_sql_pt.erl
@@ -559,6 +559,11 @@ make_sql_upsert(Table, ParseRes, Pos) ->
[make_sql_upsert_pgsql901(Table, ParseRes),
erl_syntax:atom(ok)]),
erl_syntax:clause(
+ [erl_syntax:atom(mysql), erl_syntax:underscore()],
+ [],
+ [make_sql_upsert_mysql(Table, ParseRes),
+ erl_syntax:atom(ok)]),
+ erl_syntax:clause(
[erl_syntax:underscore(), erl_syntax:underscore()],
none,
[make_sql_upsert_generic(Table, ParseRes)])
@@ -628,6 +633,9 @@ make_sql_upsert_update(Table, ParseRes) ->
State.
make_sql_upsert_insert(Table, ParseRes) ->
+ make_sql_upsert_insert_replace(Table, ParseRes, "INSERT").
+
+make_sql_upsert_insert_replace(Table, ParseRes, Keyword) ->
Vals =
lists:map(
fun({_Field, _, ST}) ->
@@ -640,7 +648,7 @@ make_sql_upsert_insert(Table, ParseRes) ->
end, ParseRes),
State =
concat_states(
- [#state{'query' = [{str, "INSERT INTO "}, {str, Table}, {str, "("}]},
+ [#state{'query' = [{str, Keyword ++" INTO "}, {str, Table}, {str, "("}]},
join_states(Fields, ", "),
#state{'query' = [{str, ") VALUES ("}]},
join_states(Vals, ", "),
@@ -648,6 +656,16 @@ make_sql_upsert_insert(Table, ParseRes) ->
]),
State.
+make_sql_upsert_replace(Table, ParseRes) ->
+ make_sql_upsert_insert_replace(Table, ParseRes, "REPLACE").
+
+make_sql_upsert_mysql(Table, ParseRes) ->
+ Replace = make_sql_query(make_sql_upsert_replace(Table, ParseRes)),
+ erl_syntax:application(
+ erl_syntax:atom(ejabberd_sql),
+ erl_syntax:atom(sql_query_t),
+ [Replace]).
+
make_sql_upsert_pgsql901(Table, ParseRes0) ->
ParseRes = lists:map(
fun({"family", A2, A3}) -> {"\"family\"", A2, A3};