]> granicus.if.org Git - ejabberd/commitdiff
Get rid of duplicated code
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 6 Apr 2012 02:31:29 +0000 (12:31 +1000)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 6 Apr 2012 02:31:29 +0000 (12:31 +1000)
src/ejd2odbc.erl
src/mod_announce_odbc.erl
src/mod_irc/mod_irc_odbc.erl
src/mod_muc/mod_muc_odbc.erl
src/mod_shared_roster_odbc.erl
src/mod_vcard_xupdate_odbc.erl
src/odbc/ejabberd_odbc.erl
src/odbc/odbc_queries.erl

index 206b403cde2fc7eb9883952d6f3edf0772a25fc2..a2331137e91511675d9d09213cad8325fe4628a6 100644 (file)
@@ -305,7 +305,7 @@ export_muc_room(Server, Output) ->
                   true ->
                       SName = ejabberd_odbc:escape(Name),
                       SRoomHost = ejabberd_odbc:escape(RoomHost),
-                      SOpts = mod_muc_odbc:encode_opts(Opts),
+                      SOpts = ejabberd_odbc:encode_term(Opts),
                       ["delete from muc_room where name='", SName,
                        "' and host='", SRoomHost, "';",
                        "insert into muc_room(name, host, opts) values (",
@@ -345,7 +345,7 @@ export_irc_custom(Server, Output) ->
                                jlib:jid_to_string(
                                  jlib:make_jid(U, S, ""))),
                       SIRCHost = ejabberd_odbc:escape(IRCHost),
-                      SData = mod_irc_odbc:encode_data(Data),
+                      SData = ejabberd_odbc:encode_term(Data),
                       ["delete from irc_custom where jid='", SJID,
                        "' and host='", SIRCHost, "';"
                        "insert into irc_custom(jid, host, data) values ("
@@ -407,7 +407,7 @@ export_sr_group(Server, Output) ->
       fun(Host, #sr_group{group_host = {Group, LServer}, opts = Opts})
             when LServer == Host ->
               SGroup = ejabberd_odbc:escape(Group),
-              SOpts = mod_shared_roster_odbc:encode_opts(Opts),
+              SOpts = ejabberd_odbc:encode_term(Opts),
               ["delete from sr_group where name='", Group, "';"
                "insert into sr_group(name, opts) values ('",
                SGroup, "', '", SOpts, "');"];
index 7e1e9dca0536e960015374c43e2008beb49fe25a..101f8aae2900ea10641277e3c7bf54830396a1f8 100644 (file)
@@ -742,10 +742,11 @@ announce_motd(Host, Packet) ->
                 lists:foreach(
                   fun({U, _S, _R}) ->
                           Username = ejabberd_odbc:escape(U),
-                          update_t("motd",
-                                   ["username", "xml"],
-                                   [Username, ""],
-                                   ["username='", Username, "'"])
+                          odbc_queries:update_t(
+                            "motd",
+                            ["username", "xml"],
+                            [Username, ""],
+                            ["username='", Username, "'"])
                   end, Sessions)
         end,
     LServer = jlib:nameprep(Host),
@@ -777,10 +778,11 @@ announce_motd_update(LServer, Packet) ->
     announce_motd_delete(LServer),
     XML = ejabberd_odbc:escape(xml:element_to_binary(Packet)),
     F = fun() ->
-                update_t("motd",
-                         ["username", "xml"],
-                         ["", XML],
-                         ["username=''"])
+                odbc_queries:update_t(
+                  "motd",
+                  ["username", "xml"],
+                  ["", XML],
+                  ["username=''"])
         end,
     ejabberd_odbc:sql_transaction(LServer, F).
 
@@ -829,8 +831,8 @@ send_motd(#jid{luser = LUser, lserver = LServer} = JID) when LUser /= "" ->
                             Local = jlib:make_jid("", LServer, ""),
                             ejabberd_router:route(Local, JID, Packet),
                             F = fun() ->
-                                        update_t(
-                                          ["motd"],
+                                        odbc_queries:update_t(
+                                          "motd",
                                           ["username", "xml"],
                                           [Username, ""],
                                           ["username='", Username, "'"])
@@ -881,27 +883,3 @@ send_announcement_to_all(Host, SubjectS, BodyS) ->
              Dest = jlib:make_jid(U, S, R),
              ejabberd_router:route(Local, Dest, Packet)
       end, Sessions).
-
-%% Almost a copy of string:join/2.
-%% We use this version because string:join/2 is relatively
-%% new function (introduced in R12B-0).
-join([], _Sep) ->
-    [];
-join([H|T], Sep) ->
-    [H, [[Sep, X] || X <- T]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
-    UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
-                           Fields, Vals),
-    case ejabberd_odbc:sql_query_t(
-           ["update ", Table, " set ",
-            join(UPairs, ", "),
-            " where ", Where, ";"]) of
-        {updated, 1} ->
-            ok;
-        _ ->
-            ejabberd_odbc:sql_query_t(
-              ["insert into ", Table, "(", join(Fields, ", "),
-               ") values ('", join(Vals, "', '"), "');"])
-    end.
index ade98caff2292cc4598c93abfb5a3ac41dec8cfe..ab0fafe1443e0d871c365041526e4ecbcf29aca7 100644 (file)
@@ -34,7 +34,6 @@
 -export([start_link/2,
         start/2,
         stop/1,
-         encode_data/1,
         closed_connection/3,
         get_connection_params/3]).
 
@@ -549,7 +548,7 @@ get_form(ServerHost, Host, From, [], Lang) ->
                      ["select data from irc_custom where "
                       "jid='", SJID, "' and host='", SHost, "';"]) of
             {selected, ["data"], [{SData}]} ->
-                Data = decode_data(SData),
+                Data = ejabberd_odbc:decode_term(SData),
                 {xml:get_attr_s(username, Data),
                 xml:get_attr_s(connections_params, Data)};
             {'EXIT', _} ->
@@ -647,7 +646,7 @@ set_form(ServerHost, Host, From, [], _Lang, XData) ->
                {ok, Tokens, _} ->
                    case erl_parse:parse_term(Tokens) of
                        {ok, ConnectionsParams} ->
-                            SData = encode_data(
+                            SData = ejabberd_odbc:encode_term(
                                       [{username,
                                         Username},
                                        {connections_params,
@@ -655,12 +654,13 @@ set_form(ServerHost, Host, From, [], _Lang, XData) ->
                             case ejabberd_odbc:sql_transaction(
                                    LServer,
                                    fun() ->
-                                           update_t("irc_custom",
-                                                    ["jid", "host", "data"],
-                                                    [SJID, SHost, SData],
-                                                    ["jid='", SJID,
-                                                     "' and host='",
-                                                     SHost, "'"]),
+                                           odbc_queries:update_t(
+                                             "irc_custom",
+                                             ["jid", "host", "data"],
+                                             [SJID, SHost, SData],
+                                             ["jid='", SJID,
+                                              "' and host='",
+                                              SHost, "'"]),
                                            ok
                                    end) of
                                {atomic, _} ->
@@ -715,7 +715,7 @@ get_connection_params(Host, ServerHost, From, IRCServer) ->
        {selected, ["data"], []} ->
            {User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""};
         {selected, ["data"], [{SData}]} ->
-            Data = decode_data(SData),
+            Data = ejabberd_odbc:decode_term(SData),
            Username = xml:get_attr_s(username, Data),
            {NewUsername, NewEncoding, NewPort, NewPassword} = 
                case lists:keysearch(
@@ -844,7 +844,7 @@ adhoc_register(ServerHost, From, To, #adhoc_request{lang = Lang,
                    Username = User,
                    ConnectionsParams = [];
                {selected, ["data"], [{Data1}]} ->
-                    Data = decode_data(Data1),
+                    Data = ejabberd_odbc:decode_term(Data1),
                    Username = xml:get_attr_s(username, Data),
                    ConnectionsParams = xml:get_attr_s(connections_params, Data)
            end,
@@ -870,16 +870,18 @@ adhoc_register(ServerHost, From, To, #adhoc_request{lang = Lang,
     if Error /= false ->
            Error;
        Action == "complete" ->
-            SData = encode_data([{username, Username},
-                                 {connections_params, ConnectionsParams}]),
+            SData = ejabberd_odbc:encode_term(
+                      [{username, Username},
+                       {connections_params, ConnectionsParams}]),
             case catch ejabberd_odbc:sql_transaction(
                          LServer,
                          fun() ->
-                                 update_t("irc_custom",
-                                          ["jid", "host", "data"],
-                                          [SJID, SHost, SData],
-                                          ["jid='", SJID,
-                                           "' and host='", SHost, "'"]),
+                                 odbc_queries:update_t(
+                                   "irc_custom",
+                                   ["jid", "host", "data"],
+                                   [SJID, SHost, SData],
+                                   ["jid='", SJID,
+                                    "' and host='", SHost, "'"]),
                                  ok
                          end) of
                {atomic, ok} ->
@@ -1029,35 +1031,3 @@ parse_connections_params([{ServerN, Server} | Servers], Encodings, Ports, Passwo
     {NewPort, NewPorts} = retrieve_connections_params(Ports, ServerN),
     {NewPassword, NewPasswords} = retrieve_connections_params(Passwords, ServerN),
     [{Server, NewEncoding, NewPort, NewPassword} | parse_connections_params(Servers, NewEncodings, NewPorts, NewPasswords)].
-
-encode_data(Data) ->
-    ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Data))).
-
-decode_data(Str) ->
-    {ok, Tokens, _} = erl_scan:string(Str ++ "."),
-    {ok, Data} = erl_parse:parse_term(Tokens),
-    Data.
-
-%% Almost a copy of string:join/2.
-%% We use this version because string:join/2 is relatively
-%% new function (introduced in R12B-0).
-join([], _Sep) ->
-    [];
-join([H|T], Sep) ->
-    [H, [[Sep, X] || X <- T]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
-    UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
-                           Fields, Vals),
-    case ejabberd_odbc:sql_query_t(
-           ["update ", Table, " set ",
-            join(UPairs, ", "),
-            " where ", Where, ";"]) of
-        {updated, 1} ->
-            ok;
-        _ ->
-            ejabberd_odbc:sql_query_t(
-              ["insert into ", Table, "(", join(Fields, ", "),
-               ") values ('", join(Vals, "', '"), "');"])
-    end.
index 318b8a70bfc799f0ac8f8cc8177b0d382a5d57fe..47dc4c9ef07643d5b6fb12b75ba9d344b49a8f2b 100644 (file)
@@ -41,8 +41,6 @@
         create_room/5,
         process_iq_disco_items/4,
         broadcast_service_message/2,
-         encode_opts/1,
-         decode_opts/1,
         can_use_nick/4]).
 
 %% gen_server callbacks
@@ -115,11 +113,12 @@ store_room(ServerHost, Host, Name, Opts) ->
     SName = ejabberd_odbc:escape(Name),
     SHost = ejabberd_odbc:escape(Host),
     LServer = jlib:nameprep(ServerHost),
+    SOpts = ejabberd_odbc:encode_term(Opts),
     F = fun() ->
-                update_t(
+                odbc_queries:update_t(
                   "muc_room",
                   ["name", "host", "opts"],
-                  [SName, SHost, encode_opts(Opts)],
+                  [SName, SHost, SOpts],
                   ["name='", SName, "' and host='", SHost, "'"])
        end,
     ejabberd_odbc:sql_transaction(LServer, F).
@@ -132,7 +131,7 @@ restore_room(ServerHost, Host, Name) ->
                  LServer, ["select opts from muc_room where name='",
                            SName, "' and host='", SHost, "';"]) of
         {selected, ["opts"], [{Opts}]} ->
-            decode_opts(Opts);
+            ejabberd_odbc:decode_term(Opts);
         _ ->
             error
     end.
@@ -549,7 +548,7 @@ load_permanent_rooms(Host, ServerHost, Access, HistorySize, RoomShaper) ->
                                            Room,
                                            HistorySize,
                                            RoomShaper,
-                                           decode_opts(Opts),
+                                           ejabberd_odbc:decode_term(Opts),
                                             ?MODULE),
                              register_room(Host, Room, Pid);
                          _ ->
@@ -577,7 +576,8 @@ start_new_room(Host, ServerHost, Access, Room,
            ?DEBUG("MUC: restore room '~s'~n", [Room]),
            mod_muc_room:start(Host, ServerHost, Access,
                               Room, HistorySize,
-                              RoomShaper, decode_opts(Opts), ?MODULE)
+                              RoomShaper, ejabberd_odbc:decode_term(Opts),
+                               ?MODULE)
     end.
 
 register_room(Host, Room, Pid) ->
@@ -766,7 +766,7 @@ iq_set_register_info(ServerHost, Host, From, Nick, Lang) ->
                                     true
                             end,
                         if Allow ->
-                                update_t(
+                                odbc_queries:update_t(
                                   "muc_registered",
                                   ["jid", "host", "nick"],
                                   [SJID, SHost, SNick],
@@ -873,35 +873,3 @@ clean_table_from_bad_node(Node, Host) ->
                              end, Es)
         end,
     mnesia:async_dirty(F).
-
-encode_opts(Opts) ->
-    ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Opts))).
-
-decode_opts(Str) ->
-    {ok, Tokens, _} = erl_scan:string(Str ++ "."),
-    {ok, Opts} = erl_parse:parse_term(Tokens),
-    Opts.
-
-%% Almost a copy of string:join/2.
-%% We use this version because string:join/2 is relatively
-%% new function (introduced in R12B-0).
-join([], _Sep) ->
-    [];
-join([H|T], Sep) ->
-    [H, [[Sep, X] || X <- T]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
-    UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
-                           Fields, Vals),
-    case ejabberd_odbc:sql_query_t(
-           ["update ", Table, " set ",
-            join(UPairs, ", "),
-            " where ", Where, ";"]) of
-        {updated, 1} ->
-            ok;
-        _ ->
-            ejabberd_odbc:sql_query_t(
-              ["insert into ", Table, "(", join(Fields, ", "),
-               ") values ('", join(Vals, "', '"), "');"])
-    end.
index 8bccc980c23fb988acdc3cb2b223243ec43235aa..570e50947e6748405518787a9a9ec12dac16322a 100644 (file)
@@ -52,7 +52,6 @@
         get_group_explicit_users/2,
         is_user_in_group/3,
         add_user_to_group/3,
-         encode_opts/1,
         remove_user_from_group/3]).
 
 -include("ejabberd.hrl").
@@ -403,7 +402,7 @@ groups_with_opts(Host) ->
     case ejabberd_odbc:sql_query(
            Host, ["select name, opts from sr_group;"]) of
         {selected, ["name", "opts"], Rs} ->
-            [{G, decode_opts(Opts)} || {G, Opts} <- Rs];
+            [{G, ejabberd_odbc:decode_term(Opts)} || {G, Opts} <- Rs];
         _ ->
             []
     end.
@@ -413,12 +412,12 @@ create_group(Host, Group) ->
 
 create_group(Host, Group, Opts) ->
     SGroup = ejabberd_odbc:escape(Group),
-    SOpts = encode_opts(Opts),
+    SOpts = ejabberd_odbc:encode_term(Opts),
     F = fun() ->
-                update_t("sr_group",
-                         ["name", "opts"],
-                         [SGroup, SOpts],
-                         ["name='", SGroup, "'"])
+                odbc_queries:update_t("sr_group",
+                                      ["name", "opts"],
+                                      [SGroup, SOpts],
+                                      ["name='", SGroup, "'"])
         end,
     ejabberd_odbc:sql_transaction(Host, F).
 
@@ -438,19 +437,19 @@ get_group_opts(Host, Group) ->
                  Host, ["select opts from sr_group "
                         "where name='", SGroup, "';"]) of
         {selected, ["opts"], [{SOpts}]} ->
-            decode_opts(SOpts);
+            ejabberd_odbc:decode_term(SOpts);
         _ ->
             error
     end.
 
 set_group_opts(Host, Group, Opts) ->
     SGroup = ejabberd_odbc:escape(Group),
-    SOpts = encode_opts(Opts),
+    SOpts = ejabberd_odbc:encode_term(Opts),
     F = fun() ->
-                update_t("sr_group",
-                         ["name", "opts"],
-                         [SGroup, SOpts],
-                         ["name='", SGroup, "'"])
+                odbc_queries:update_t("sr_group",
+                                      ["name", "opts"],
+                                      [SGroup, SOpts],
+                                      ["name='", SGroup, "'"])
         end,
     ejabberd_odbc:sql_transaction(Host, F).
 
@@ -473,7 +472,7 @@ is_group_enabled(Host1, Group1) ->
                  Host, ["select opts from sr_group "
                         "where name='", SGroup, "';"]) of
         {selected, ["opts"], [{SOpts}]} ->
-            Opts = decode_opts(SOpts),
+            Opts = ejabberd_odbc:decode_term(SOpts),
             not lists:member(disabled, Opts);
         _ ->
             false
@@ -486,7 +485,7 @@ get_group_opt(Host, Group, Opt, Default) ->
                  Host, ["select opts from sr_group "
                         "where name='", SGroup, "';"]) of
         {selected, ["opts"], [{SOpts}]} ->
-            Opts = decode_opts(SOpts),
+            Opts = ejabberd_odbc:decode_term(SOpts),
            case lists:keysearch(Opt, 1, Opts) of
                {value, {_, Val}} ->
                    Val;
@@ -659,10 +658,11 @@ add_user_to_group(Host, US, Group) ->
             SJID = make_jid_s(US),
             SGroup = ejabberd_odbc:escape(Group),
             F = fun() ->
-                        update_t("sr_user",
-                                 ["jid", "grp"],
-                                 [SJID, SGroup],
-                                 ["jid='", SJID, "' and grp='", SGroup, "'"])
+                        odbc_queries:update_t(
+                          "sr_user",
+                          ["jid", "grp"],
+                          [SJID, SGroup],
+                          ["jid='", SJID, "' and grp='", SGroup, "'"])
                 end,
             ejabberd_odbc:sql_transaction(Host, F)
     end.
@@ -1163,35 +1163,3 @@ make_jid_s(U, S) ->
 
 make_jid_s({U, S}) ->
     make_jid_s(U, S).
-
-encode_opts(Opts) ->
-    ejabberd_odbc:escape(erl_prettypr:format(erl_syntax:abstract(Opts))).
-
-decode_opts(Str) ->
-    {ok, Tokens, _} = erl_scan:string(Str ++ "."),
-    {ok, Opts} = erl_parse:parse_term(Tokens),
-    Opts.
-
-%% Almost a copy of string:join/2.
-%% We use this version because string:join/2 is relatively
-%% new function (introduced in R12B-0).
-join([], _Sep) ->
-    [];
-join([H|T], Sep) ->
-    [H, [[Sep, X] || X <- T]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
-    UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
-                           Fields, Vals),
-    case ejabberd_odbc:sql_query_t(
-           ["update ", Table, " set ",
-            join(UPairs, ", "),
-            " where ", Where, ";"]) of
-        {updated, 1} ->
-            ok;
-        _ ->
-            ejabberd_odbc:sql_query_t(
-              ["insert into ", Table, "(", join(Fields, ", "),
-               ") values ('", join(Vals, "', '"), "');"])
-    end.
index c3d87a70b50af493de0d526fa116096c32dfe36f..b93563dd8999d8bc4c344280464b1d3ad34dd95e 100644 (file)
@@ -75,8 +75,8 @@ add_xupdate(LUser, LServer, Hash) ->
     Username = ejabberd_odbc:escape(LUser),
     SHash = ejabberd_odbc:escape(Hash),
     F = fun() ->
-                update_t(
-                  ["vcard_xupdate"],
+                odbc_queries:update_t(
+                  "vcard_xupdate",
                   ["username", "hash"],
                   [Username, SHash],
                   ["username='", Username, "'"])
@@ -131,27 +131,3 @@ build_xphotoel(User, Host) ->
                  end,
     PhotoEl = [{xmlelement, "photo", [], PhotoSubEls}],
     {xmlelement, "x", [{"xmlns", ?NS_VCARD_UPDATE}], PhotoEl}.
-
-%% Almost a copy of string:join/2.
-%% We use this version because string:join/2 is relatively
-%% new function (introduced in R12B-0).
-join([], _Sep) ->
-    [];
-join([H|T], Sep) ->
-    [H, [[Sep, X] || X <- T]].
-
-%% Safe atomic update.
-update_t(Table, Fields, Vals, Where) ->
-    UPairs = lists:zipwith(fun(A, B) -> A ++ "='" ++ B ++ "'" end,
-                           Fields, Vals),
-    case ejabberd_odbc:sql_query_t(
-           ["update ", Table, " set ",
-            join(UPairs, ", "),
-            " where ", Where, ";"]) of
-        {updated, 1} ->
-            ok;
-        _ ->
-            ejabberd_odbc:sql_query_t(
-              ["insert into ", Table, "(", join(Fields, ", "),
-               ") values ('", join(Vals, "', '"), "');"])
-    end.
index 8227dfcb60a0c5162c029627fb91159d20a6aaf5..6ac5414bae6a89e625be2a064b22e69d390a50bb 100644 (file)
@@ -40,6 +40,8 @@
         escape/1,
         escape_like/1,
         to_bool/1,
+         encode_term/1,
+         decode_term/1,
         keep_alive/1]).
 
 %% gen_fsm callbacks
@@ -169,6 +171,14 @@ to_bool(true) -> true;
 to_bool(1) -> true;
 to_bool(_) -> false.
 
+encode_term(Term) ->
+    escape(erl_prettypr:format(erl_syntax:abstract(Term))).
+
+decode_term(Str) ->
+    {ok, Tokens, _} = erl_scan:string(Str ++ "."),
+    {ok, Term} = erl_parse:parse_term(Tokens),
+    Term.
+
 %%%----------------------------------------------------------------------
 %%% Callback functions from gen_fsm
 %%%----------------------------------------------------------------------
index e831d166c96b9d043b125b0b33a83ba3579812e5..2af5f2ba63b4f705139a44bd3740a3a69b0fe1bd 100644 (file)
@@ -28,6 +28,7 @@
 -author("mremond@process-one.net").
 
 -export([get_db_type/0,
+         update_t/4,
         sql_transaction/2,
         get_last/2,
         set_last_t/4,